Django评论NoReverseMatch

2024-05-13 07:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的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\u 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.

谢谢你的帮助,我真的很感激


Tags: djangonameselftruedefaultmodelsarticledjangocms
1条回答
网友
1楼 · 发布于 2024-05-13 07:44:45

您可以尝试:

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

文件:Reversing namespaced URLs

相关问题 更多 >