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