【问题标题】:Customizing django-comments自定义 django-comments
【发布时间】:2010-12-24 04:33:38
【问题描述】:

所以,我正在使用 django.contrib.cmets。我已经安装好了,但不是笨拙的默认评论表单,我想使用只显示文本区域和提交按钮的自定义表单模板。

这背后的基本原理是,用户只有在已经通过身份验证的情况下才能看到表单,我希望保持表单简单并自动获取他们的用户名等。

我已经实现了一个自定义表单,但是当我尝试提交它时出现错误。

这是我的模板中带有评论表单的页面(条目是从视图传递的对象):

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

这是我在 /templates/cmets/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.

谁能帮忙?

【问题讨论】:

    标签: django django-comments


    【解决方案1】:

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

    来自 django.contrib.cmets.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 %}
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-07-12
        • 2023-02-06
        • 1970-01-01
        • 2014-06-24
        • 1970-01-01
        • 2011-04-09
        • 2014-12-19
        • 1970-01-01
        • 2015-07-17
        相关资源
        最近更新 更多