我正在尝试使用内置注释框架,但我无法让它工作。这是代码:
#view.py
from django.contrib.comments.forms import *
from forms import *
from models import *
def view_item_detail(request, item_id):
item = Item.manager.get(item_id)
form = CommentForm(item)
if request.POST:
form = CommentForm(request.POST)
if form.is_valid():
new_comment = form.save(commit=False)
# do stuff here
new_comment.save()
messages.success(request, "Your comment was successfully posted!")
return HttpResponseRedirect("")
return render_to_response('item_detail.html',
RequestContext(request, {'item': item,
'authentication': request.user.is_authenticated(),
'user': request.user, 'form': form}))
和
#item_detail.html
{% if authentication %}
{% if form %}
<form action="" method="post">{% csrf_token %}
{{ form }}
<p><input type="submit" name="submit" value="Submit comment" /></p>
</form>
{% endif %}
{% else %}
<p>You must be logged-in to post a comment</p>
{% endif %}
我得到的错误是“'QueryDict'对象没有属性'_meta'”来自行
form = CommentForm(request.POST)
欢迎任何帮助,欢呼。
答案 0 :(得分:1)
在阅读您对我的上一个答案的评论后,如果您使用的是内置评论框架,则无需在评论表中添加评论表单,这是抱歉的。
from forms import *
from models import *
def view_item_detail(request, item_id):
item = get_object_or_404(Item, pk=item_id)
return render_to_response('item_detail.html',
RequestContext(request, {'item': item,
'authentication': request.user.is_authenticated(),
'user': request.user,}))
现在确保你在urls.py中有这个:
urlpatterns = patterns('',
...
(r'^comments/', include('django.contrib.comments.urls')),
...
)
和'django.contrib.comments'
已添加到您的INSTALLED_APPS和syncdb'd
现在在item_detail.html
文件中添加:
{% load comments %}
您希望显示评论的位置:
{% render_comment_list for item %}
您希望显示添加评论表单:
{% if authentication %}
{% get_comment_form for item as form %}
<form action="{% comment_form_target %}" method="post">
{{ form }}
<tr>
<td></td>
<td><input type="submit" name="preview" class="submit-post" value="Preview"></td>
</tr>
</form>
{% endif %}
作为文档的一部分:
指定您想要的网址 评论结束后重定向到 发布后,您可以添加隐藏表单 在评论中调用下一个输入 形成。例如:
<input type="hidden" name="next" value="{% url my_comment_was_posted %}" />
(为您的示例编辑):
{% if authentication %}
{% get_comment_form for item as form %}
<form action="{% comment_form_target %}" method="post">
{{ form }}
<tr>
<td></td>
<input type="hidden" name="next" value="{{ item.get_absolute_url }}" />
<td><input type="submit" name="preview" class="submit-post" value="Preview"></td>
</tr>
</form>
{% else %}
<p>You must be logged-in to post a comment</p>
{% endif %}