我用Django寫了一篇博客文章(如:mysite.com/a/article_id/),希望用戶能夠發表評論該文章的評論頁面上(即:mysite.com/a/article_id/comments/)在文章的評論頁面上使用django評論(/ a/2/comments /)
到目前爲止,我還沒有太多成功。看起來url中的article_id阻止了某種程度上的評論應用程序。
這是我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_comments.html
{% block content %}
{% load comments %}
{% get_comment_form for post as form %}
<form action="https://stackoverflow.com/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 %}
(哦和th是是一種明顯的,但評論的應用程序安裝在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}}/comments/post/替換它來顯示頁面,但如果我嘗試發表評論,django引發不同的錯誤:
TypeError at /a/2/comments/post/
post_comment() got an unexpected keyword argument 'post_id'
有沒有辦法讓評論應用忽略id_post?或者另一種方式來做到這一點?
謝謝。
感謝您的回答!當你回答時,我已經找到了一個解決方案(我發佈了),但你的前兩個建議看起來也可以起作用。最後,我認爲第三個選擇是最好的。 – oliv23 2013-03-22 09:44:48