使用内置注释框架的错误

时间:2011-04-14 01:25:00

标签: django django-forms django-comments

我正在尝试使用内置注释框架,但我无法让它工作。这是代码:

#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)

欢迎任何帮助,欢呼。

1 个答案:

答案 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 %}

阅读文档here和自定义阅读this页。

作为文档的一部分:

  

指定您想要的网址   评论结束后重定向到   发布后,您可以添加隐藏表单   在评论中调用下一个输入   形成。例如:

<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 %}