代码之家  ›  专栏  ›  技术社区  ›  Ignacio

如何通过删除不必要的字段来扩展comments框架(django)?

  •  14
  • Ignacio  · 技术社区  · 14 年前

    我已经阅读了django文档中关于comments框架以及如何定制它的内容( http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/ ) 在那一页中,它展示了如何 添加 表单的新字段。但我想做的是 去除 不必要的字段,如url、email(以及其他次要的mod)。

    在同一个doc页面上,它说方法是从 basecommentabstractmodel ,但差不多就是这样,我已经走了这么远,现在我不知所措。我在这方面找不到任何线索。

    3 回复  |  直到 7 年前
        1
  •  12
  •   mitchf    14 年前

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

    为了自定义默认的注释表单和列表显示,我在根“templates”目录中创建了一个“comments”目录,并重写了两个默认的注释模板。

    我的“/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 %}
    

    它只与默认的comments表单略有不同,主要是抑制不需要的“name”、“email”和“url”输入的显示。

    我的“/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] %} 要在对象上生成注释列表(用适当的对象名替换[对象])。

    这对我来说非常有用,而且仍然给我提供了django评论中的所有其他“免费”内容(适度、标记、提要、多态关联等等)。

        2
  •  4
  •   Community Rick James    7 年前

    通过实际的comments框架子类化方法,而不是在表单中隐藏元素/其他不整洁的hack,可以找到一个关于如何优雅地完成此任务的简洁摘要。 Django Comments: Want to remove user URL, not expand the model. How to?

    本质上,您可以将commentform子类化,并更改其g e t_comment_create_data(self)方法,然后弹出不需要的属性(例如电子邮件、url等)。

    j

        3
  •  2
  •   Ofri Raviv    14 年前

    你可以试试 overriding the comment form with a custom template 只显示你想要的字段。