Я пытаюсь создать систему комментариев в моем приложении django, и я застрял.Это моя ошибка, и я не могу обойти ее.Обычно у меня нет проблем с исправлением обратных ошибок, но на этот раз я ничего не понял.Я начинающий программист.
Это моя ошибка:
NoReverseMatch at /news/5/comment/
Reverse for 'article' not found. 'article' is not a valid view function or pattern name.
Я не совсем уверен на 100%, что возвращать в функцию здесь:
article = get_object_or_404(Article, pk=pk)
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = article
comment.save()
return HttpResponseRedirect(reverse('article', kwargs={"pk": article.pk}))
else:
form = CommentForm()
return render(request, 'news/add_comment_to_article.html', {'form': form})
Я хочу, чтобы меня перенаправили обратно в мою статью с путем / news / article_id (pk), и я не понял, как это сделать.
Мои URL:
from . import views
app_name = "news"
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:article_id>/', views.article, name='article'),
path('articles/', views.ArticlesView.as_view(), name='articles'),
path('search/', include('haystack.urls')),
path('<int:pk>/comment/', views.add_comment_to_article, name='add_comment_to_post'),
]
Мои модели:
from django.db import models
from datetime import datetime
from autoslug import AutoSlugField
class Article(models.Model):
title = models.CharField('title', max_length=200, blank=True)
slug = AutoSlugField(populate_from='title', default="",
always_update=True, unique=True)
author = models.CharField('Author', max_length=200, default="")
description = models.TextField('Description', default="")
article_image = models.ImageField('Article Image')
img2 = models.ImageField('Article Image 2', default="", blank=True)
img3 = models.ImageField('Article Image 3', default="", blank=True)
img4 = models.ImageField('Article Image 4', default="", blank=True)
img5 = models.ImageField('Article Image 5', default="", blank=True)
img6 = models.ImageField('Article Image 6', default="", blank=True)
is_published = models.BooleanField(default=False)
article_text = models.TextField('Article text', default="")
pub_date = models.DateTimeField(default=datetime.now, blank=True)
def __str__(self):
return self.title
class Comment(models.Model):
post = models.ForeignKey('Article', on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=datetime.now, blank=True)
approved_comment = models.BooleanField(default=False)
def approve(self):
self.approved_comment = True
self.save()
def __str__(self):
return self.text
Редактировать:
Вот мой обратный запрос в соответствии с просьбой:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/news/5/comment/
Django Version: 2.1.8
Python Version: 3.6.8
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_news_blog.users',
'djangocms_admin_style',
'django.contrib.admin',
'news',
'polls',
'polls_cms_integration',
'crispy_forms',
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_framework',
'cms',
'menus',
'treebeard',
'sekizai',
'filer',
'easy_thumbnails',
'mptt',
'djangocms_text_ckeditor',
'djangocms_link',
'djangocms_file',
'djangocms_picture',
'djangocms_video',
'djangocms_googlemap',
'djangocms_snippet',
'djangocms_style',
'djangocms_column',
'parler',
'sortedm2m',
'taggit',
'whoosh',
'haystack',
'debug_toolbar',
'django_extensions']
Installed Middleware:
['django.middleware.locale.LocaleMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware']
Traceback:
File "/home/sandi/.virtualenvs/news_blog/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/home/sandi/.virtualenvs/news_blog/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/home/sandi/.virtualenvs/news_blog/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3.6/contextlib.py" in inner
52. return func(*args, **kwds)
File "/home/sandi/Desktop/django_news_blog/news/views.py" in add_comment_to_article
51. return HttpResponseRedirect(reverse('article', kwargs={"pk": article.pk}))
File "/home/sandi/.virtualenvs/news_blog/lib/python3.6/site-packages/django/urls/base.py" in reverse
90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/home/sandi/.virtualenvs/news_blog/lib/python3.6/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
622. raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /news/5/comment/
Exception Value: Reverse for 'article' not found. 'article' is not a valid view function or pattern name.
Спасибо за вашу помощь, я действительно ценю это!!!