Джанго Комментарии NoReverseMatch - PullRequest
       0

Джанго Комментарии NoReverseMatch

0 голосов
/ 23 сентября 2019

Я пытаюсь создать систему комментариев в моем приложении 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.

Спасибо за вашу помощь, я действительно ценю это!!!

1 Ответ

3 голосов
/ 23 сентября 2019

вы можете попробовать:

if form.is_valid():
    comment = form.save(commit=False)
    comment.post = article
    comment.save()
    HttpResponseRedirect(reverse('news:article', kwargs={"article_id": article.pk}))

Документы: Реверсирование URL-адресов в пространстве имен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...