14

私はコメントフレームワークとそれをカスタマイズする方法についてdjangoドキュメントを読んでいます(http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/)そのページでは、フォームに新しいフィールドを追加します。しかし、私がやりたいのは、URL、電子メールなどの不要なフィールドを削除することです(他のマイナーな変更の中でも)。

その同じドキュメントページで、BaseCommentAbstractModelからカスタムコメントクラスを拡張する方法があると書かれていますが、それで終わりです。この特定の側面については何も見つかりませんでした。

4

3 に答える 3

12

私は最近、Ofri が言及したソリューションを実装しました。これは、コメントに孤立した「コメント」フィールドのみを受け入れたかったからです (SO のように、「名前」、「電子メール」、「URL」はありません)。

デフォルトのコメント フォームとリスト表示をカスタマイズするために、ルートの「templates」ディレクトリに「comments」ディレクトリを作成し、2 つのデフォルトのコメント テンプレートをオーバーライドしました。

私の「/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 %}

これは、デフォルトのコメント フォームとわずかに異なるだけで、主に不要な「名前」、「電子メール」、および「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 コメントに付属する他のすべての「無料」のもの (モデレーション、フラグ、フィード、ポリモーフィックな関連付けなど) を引き続き提供しています。

于 2010-08-06T06:11:22.203 に答える
4

これをエレガントに行う方法の整然とした概要は、フォーム内の要素を非表示にしたり、モデルを拡張したりせずに、実際のコメント フレームワークのサブクラス化アプローチを使用して見つけることができます。方法?

基本的に、CommentForm をサブクラス化し、その get_comment_create_data(self) メソッドを変更してから、不要な属性 (email、url など) をポップアウトします。

J

于 2011-07-31T15:24:11.623 に答える
2

必要なフィールドのみを表示するカスタム テンプレートでコメント フォームを上書きしてみることができます。

于 2010-03-07T12:26:57.627 に答える