Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对第'条使用django注释;s评论页(/a/2/comments/)_Django_Django Comments - Fatal编程技术网

对第'条使用django注释;s评论页(/a/2/comments/)

对第'条使用django注释;s评论页(/a/2/comments/),django,django-comments,Django,Django Comments,我已经用Django写了一个博客,里面有文章(比如:mysite.com/a/article_id/),我希望用户能够在文章的评论页面上发表评论(即:mysite.com/a/article_id/comments/) 到目前为止,我还没有取得多少成功。url中的文章id似乎以某种方式阻止了评论应用程序 这是我的url.py: 这是我的模板detail_comments.html {% block content %} {% load comments %} {% get_comment_for

我已经用Django写了一个博客,里面有文章(比如:mysite.com/a/article_id/),我希望用户能够在文章的评论页面上发表评论(即:mysite.com/a/article_id/comments/)

到目前为止,我还没有取得多少成功。url中的文章id似乎以某种方式阻止了评论应用程序

这是我的url.py:

这是我的模板detail_comments.html

{% block content %}
{% load comments %}
{% get_comment_form for post as form %}

<form action="/a/{{ post.id }}/comments/post/" method="post">
    {% csrf_token %}
{{ form.content_type }}
{{ form.object_pk }}
{{ form.timestamp }}
{{ form.security_hash }}
<p style="display:none"><label for="id_honeypot">Leave blank</label>{{ form.honeypot }}</p>
<p>
    <label for="id_comment">Comment</label>
    {{ form.comment }}
</p>
<p><input type="submit" name="post" value="Post &rarr;" /></p>
</form>
{% endblock %}
我试图通过将其替换为/a/{{post.id}/comments/post/来“破解”我的方法,它可以显示页面,但如果我试图发布评论,django会抛出一个不同的错误:

TypeError at /a/2/comments/post/
post_comment() got an unexpected keyword argument 'post_id'
有没有办法让评论应用程序忽略id_帖子?还是另一种方法


谢谢。

错误消息非常明确:
django.contrib.comments.views.post\u comment
不接受
post\u id
参数,因此它会抛出

既然
注释
视图既不需要也不想要参数,为什么不干脆把它省略掉呢

您应该能够修改URL路由以完全不捕获post_id(尽管以一致性为代价),如下所示:

或者干脆

    url(r'^a/\d+/comments/', include('django.contrib.comments.urls')),
请注意,如果这种嵌套将被忽略,那么在这一点上进行这种嵌套实际上毫无意义,因此您可以将其简化为:

    url(r'^comments/', include('django.contrib.comments.urls')),
诚然,如果没有残留前缀,这看起来就不那么漂亮和伪RESTful,但是如果你只是想忽略它,那么把它放在那里是没有意义的


你可以做的另一件事是包装
评论
应用程序提供的所有视图,这样如果
post\u id
无效,他们就会抛出404,但这似乎有些过分。

好吧,所以我只需照文档所说的做,就解决了我的问题。我导入了如下评论:

url(r'^comments/', include('django.contrib.comments.urls')),
并将此url指向显示评论列表和表单的mydetail_comments视图:

url(r'^a/(?P<post_id>\d+)/comments/$', 'detail_comments'),
url(r'^a/(?P\d+)/comments/$,“detail\u comments”),
因此,处理基本上发生在/comments/上,但用户与此页面交互:/a/post\u id/comments/

我唯一的问题是Django评论应用程序在发布评论后自动将用户重定向到成功页面。
我通过在表单中设置一个“下一个”隐藏字段来解决这个问题,该字段指示当前页面。

谢谢您的回答!当你回答的时候,我已经找到了一个解决方案(我发布了),但是你的前两个建议看起来也能奏效。最后,我认为第三种选择是最好的。
    url(r'^a/\d+/comments/', include('django.contrib.comments.urls')),
    url(r'^comments/', include('django.contrib.comments.urls')),
url(r'^comments/', include('django.contrib.comments.urls')),
url(r'^a/(?P<post_id>\d+)/comments/$', 'detail_comments'),