自定义django-comments

时间:2009-12-07 21:10:23

标签: django django-comments

所以,我正在使用django.contrib.comments。我安装好了,但不是笨重的默认评论表单,我想使用一个自定义表单模板,只显示一个textarea并提交按钮。

这背后的基本原理是,如果用户区域已经过身份验证,用户只会看到该表单,并且我希望保持表单简单并自动获取用户名等。

我已经实现了自定义表单,但在尝试提交时遇到错误。

以下是我的模板中包含注释表单的内容(条目是从视图传递的对象):

{% load comments %}
{% render_comment_form for entry %}

这是我在/templates/comments/form.html中的HTML:

{% if user.is_authenticated %}
    <p>Submit a comment:</p>
    <form action="/comments/post/" method="post">
    <textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea>
            <input type="hidden" name="options" value="{{ options }}" />
            <input type="hidden" name="target" value="{{ target }}" />
            <input type="hidden" name="gonzo" value="{{ hash }}" />
            <input type="hidden" name="next" value="{{ entry.get_absolute_url }}" /> 
             <span style="float:right;"><input type="submit" name="post" value="Add"></span>
    </form>
    {% else %}
        <p>Please <a href="/login/">log in</a> to post a comment.</p>
    {% endif %}

最初渲染没问题,但是当我尝试提交评论表单时,我收到以下Django错误:

Comment post not allowed (400)
Why:    Missing content_type or object_pk field.

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

注释模型使用通用外键映射到进行评论的对象,例如博客条目。这些是标准评论表中包含的必填隐藏字段。

来自django.contrib.comments.models

...
class CommentSecurityForm(forms.Form):
    """
    Handles the security aspects (anti-spoofing) for comment forms.
    """
    content_type  = forms.CharField(widget=forms.HiddenInput)
    object_pk     = forms.CharField(widget=forms.HiddenInput)
...

如果您尚未更改表单类并且只想更改html模板,则可以通过在所有隐藏字段上添加for循环来包含这些字段。

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}

答案 1 :(得分:1)

通过从Theju's app复制来解决问题 - 特别是,请参阅Joshua Works对第2部分的评论。