【发布时间】:2013-02-15 06:53:11
【问题描述】:
我用 Django 写了一个博客,里面有文章(例如:mysite.com/a/article_id/),并希望用户能够在文章的评论页面上发表评论(即:mysite .com/a/article_id/cmets/)
到目前为止,我还没有取得太大的成功。似乎 url 中的 article_id 以某种方式阻止了 cmets 应用程序。
这是我的 url.py:
from django.conf.urls import patterns, include, url
from django.contrib.auth.views import login, logout
urlpatterns = patterns('blogengine.views',
url(r'^$', 'get_posts', name='index'),
url(r'^write/', 'write_post', name='write'),
url(r'^a/(?P<post_id>\d+)/$', 'detail'),
url(r'^a/(?P<post_id>\d+)/comments/$', 'detail_comments'),
url(r'^a/(?P<post_id>\d+)/comments/', include('django.contrib.comments.urls')),
)
这些是我的观点 - views.py:
def detail_comments(request, post_id):
p = get_object_or_404(Post, pk=post_id)
return render_to_response('blogengine/detail_comments.html', {'post': p},
context_instance=RequestContext(request))
这是我的模板 detail_cmets.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 →" /></p>
</form>
{% endblock %}
(哦,这很明显,但是 cmets 应用程序安装在 settings.py 中)
如果表单操作设置为 {% comment_form_target %},就像文档中建议的那样,django 会抛出此错误:
NoReverseMatch at /a/2/comments/
Reverse for 'django.contrib.comments.views.comments.post_comment' with arguments '()' and keyword arguments '{}' not found.
我尝试用这个 /a/{{ post.id }}/cmets/post/ 替换它来“破解”我的出路,它可以显示页面,但是如果我尝试发表评论,django 抛出不同的错误:
TypeError at /a/2/comments/post/
post_comment() got an unexpected keyword argument 'post_id'
有没有办法让 cmets 应用程序忽略 id_post?或者其他方式来做到这一点?
谢谢。
【问题讨论】: