14

我一直在阅读 django 文档关于评论框架以及如何自定义它(http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/)在该页面中,它显示了如何向表单添加新字段。但我想要做的是删除不必要的字段,如 URL、电子邮件(以及其他次要模块。)

在同一个文档页面上,它说要走的路是从BaseCommentAbstractModel扩展我的自定义评论类,但仅此而已,我已经走了这么远,现在我不知所措。我在这个特定方面找不到任何东西。

4

3 回答 3

12

我最近实现了 Ofri 提到的解决方案,因为我只想接受一个单独的“comment”字段来进行评论(就像 SO 一样,没有“name”,没有“email”,也没有“url”)。

为了自定义默认评论表单和列表显示,我在我的根“模板”目录中创建了一个“评论”目录,并覆盖了两个默认评论模板。

我的“/templates/comments/form.html”是:

{% load comments i18n %}
{% if user.is_authenticated %}
    <form action="{% comment_form_target %}" method="post">
        {% csrf_token %}
        {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
        {% for field in form %}
            {% if field.is_hidden %}
                {{ field }}
            {% else %}
                {% if field.name != "name" and field.name != "email" and field.name != "url" %}
                    {% if field.errors %}{{ field.errors }}{% endif %}
                    <p {% if field.errors %} class="error"{% endif %} {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
                    {{ field }}
                    </p>
                {% endif %}
            {% endif %}
        {% endfor %}
        <input type="submit" name="post" class="submit-post" value="{% trans "Add Comment" %}" />
    </form>
{% else %}
    I'm sorry, but you must be <a href="javascript:alert('send to login page')">logged in</a> to submit comments.
{% endif %}

这与默认的评论表单略有不同,主要是禁止显示不需要的“姓名”、“电子邮件”和“网址”输入。

我的“/templates/comments/list.html”是:

<div class="comment_start"></div>
{% for comment in comment_list %}
    <div class="comment">
       {{ comment.comment }} 
       (from <a href="javascript:alert('show user profile/stats')">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago)
    </div>
{% endfor %}

在我想要表单的页面上,我首先调用{% load comments %}然后{% render_comment_form for [object] %} 来显示表单,或者{% render_comment_list for [object] %}生成对象的评论列表(将 [object] 替换为适当的对象名称)。

这对我来说非常有用,并且仍然为我提供了 django 评论附带的所有其他“免费”内容(审核、标记、提要、多态关联等......)

于 2010-08-06T06:11:22.203 回答
4

关于如何优雅地做到这一点的整洁总结,通过实际的评论框架子类化方法,而不是在表单中隐藏元素/其他不整洁的黑客,可以找到Django 评论:想要删除用户 URL,而不是扩展模型。如何?

本质上,您将 CommentForm 子类化,并更改其 get_comment_create_data(self) 方法,然后弹出您不想要的属性(例如电子邮件、url 等)

Ĵ

于 2011-07-31T15:24:11.623 回答
2

您可以尝试使用仅显示所需字段的自定义模板覆盖评论表单。

于 2010-03-07T12:26:57.627 回答