反转&#39; update_comment&#39;有参数&#39;(&#39;&#39;,)&#39;未找到。尝试了1种模式:[&#39;评论\\ /(?P <news_pk> [0-9] +)$&#39;]

时间:2018-04-25 05:46:11

标签: python django django-models django-forms django-templates

我正在编写一个新闻网站。现在我正在详细介绍评论职位。并且遇到问题说:

Reverse for 'update_comment' with arguments '('',)' not found. 1 pattern(s) tried: ['comment\\/(?P<news_pk>[0-9]+)$']

我尝试了很多方法和时间,但仍然无法解决问题,而且我的代码无法解决问题。真的需要你的帮助。

评论帖子功能在news_detail.html中。我的项目中有两个重要的应用新闻操作评论模型位于操作

这是我的 root urls.py

path('news', include(('news.urls', 'news'), namespace="news")),
path('', include(('operation.urls', 'operation'), namespace="operation")),

以下是 news / urls.py

path('-<int:news_pk>', newsDetailView, name="news_detail")

这是operation / urls.py:

path('comment/<int:news_pk>', views.update_comment, name="update_comment"),

以下是 news / view.py

def newsDetailView(request, news_pk):
    news = News.objects.get(id=news_pk)
    title = news.title
    author = news.author_name
    add_time = news.add_time
    content = news.content
    category = news.category
    tags = news.tag.annotate(news_count=Count('news'))

    all_comments = NewsComments.objects.filter(news=news)
    return render(request, "news_detail.html", {
        'title': title,
        'author': author,
        'add_time': add_time,
        'content': content,
        'tags': tags,
        'category': category,
        'all_comments': all_comments,
    })

这是 operation / views.py

def update_comment(request, news_pk):
    news = News.objects.get(id=news_pk)
    comment_form = CommentForm(request.POST or None)
    if request.method == 'POST' and comment_form.is_valid():
        if not request.user.is_authenticated:
            return render(request, 'login.html', {})
        comments = comment_form.cleaned_data.get("comment")
        news_comment = NewsComments(user=request.user, comments=comments, news=news)
        news_comment.save()

        return render(request, "news_detail.html", {
            'news_comment': news_comment,
            'news':news
        })

这是news_detail.html:

{% if user.is_authenticated %}

<form method="POST" action="{% url 'operation:update_comment' news.pk %}">{% csrf_token %}              

<textarea id="js-pl-textarea" name="comment"></textarea>      

<input type="submit" id="js-pl-submit" value="发表评论"></input></form>

3 个答案:

答案 0 :(得分:3)

您未将news对象传递到 news_detail.html 的上下文中。只需传递news并在模板中执行{{ news.title }}之类的操作(而不是{{ title }}),即可简化视图:

def newsDetailView(request, news_pk):
    news = get_object_or_404(News, id=news_pk)
    tags = news.tag.annotate(news_count=Count('news'))
    all_comments = NewsComments.objects.filter(news=news)

    return render(request, "news_detail.html", {
        'news': news,
        'tags': tags,
        'all_comments': all_comments,
    })

现在news.pk将作为{% url ... %}标记的参数。如果找不到news对象,我也会确保生成404错误(在您的代码中,它会崩溃)。

答案 1 :(得分:0)

{% url 'some-url-name' arg1=v1 arg2=v2 %}

参考:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#url

固定: 你的代码是正确的。错误提示:

 arguments '('',)' not found. 

 arguments '('',)'

答案 2 :(得分:0)

它可能会起作用,而不是在url中使用urls.py il来实现。

尝试url(r'^create_order/(?P<id>\d*)$', views.createOrder, name='create_order')