3

threadedcommetnsをDjangoアプリに統合しようとしていますが、その動作を理解するのに問題があります。テンプレートは次のようになります(チュートリアルの例に基づく):

<h3>Comments on This Post:</h3>
{% get_threaded_comment_tree for post as tree %}
{% for comment in tree %}
    <div style="margin-left: {{ comment.depth }}em;" class="comment">
        {% link_to_profile comment.user %}
        {% auto_transform_markup comment %}
    </div>
{% endfor %}
<p>Reply to Original:</p>
<form method="POST" action="{% get_comment_url post %}">
    {% csrf_token %}
    <ul>
        {% get_threaded_comment_form as form %}
        {{ form.as_ul }}
        <li><input type="submit" value="Submit Comment" /></li>
    </ul>
</form>

それで、それらがスレッド化されたコメントである場合、誰かがすでに残しているコメントに返信するにはどうすればよいですか?そのためのフォームはどこにありますか?私はなんとかReply to Originalフォームを取得することができましたが、これにより、コメントはまったくスレッド化されません。

よろしくお願いします。

PS実際、このアプリがdjango 1.3でどのように機能するかについてはあまり満足していないので、別の方法を提案することも素晴らしい答えになるでしょう。

4

4 に答える 4

6

djangothreadedcommetnsはここではあまり人気がないようです:)

素晴らしいライブラリを見つけました:django-mptt

django-mpttを使用してdjangoにスレッド化されたコメントを実装する方法を説明するチュートリアルは次のとおりです。http://codeblogging.net/blogs/1/3/

于 2011-05-24T10:44:19.023 に答える
3

フォームに「id_parent」divがあり、値を親のidに変更します。

jQueryでは次のようになります。

$('#commentForm').find("#id_parent").attr("value", divid);
于 2011-10-13T15:48:07.990 に答える
1

オリジナルへの返信は良さそうです。

<form method="POST" action="{% get_comment_url post %}">
    {% csrf_token %}
    <ul>
        {% get_threaded_comment_form as form %}
        {{ form.as_ul }}
        <li><input type="submit" value="Submit Comment" /></li>
    </ul>
</form>

コメントごとに返信フォームを保持し、スレッド化したままにしておきたいとします。

<div class="bulk">
    {% get_threaded_comment_tree for post as tree %}
        {% for comment in tree %}
            <div style="margin-left:{{comment.depth}}em;">
                {{comment}}
                Reply to this comment
                <form action="{% get_comment_url post comment %}" method="POST">
                    <ul>
                        {% get_threaded_comment_form as form %}
                        {{ form.as_ul }}
                        <li><input type="submit" value="Submit Reply" /></li>
                    </ul>
                </form>
            </div>
        {% endfor %}
</div>

ここでは、コメントツリーをレンダリングし、各コメントの下にフォームを保持して、その特定のコメントに返信できるようにします。このフォームの投稿URLはとして設定され{% get_comment_url post comment %}ます。これは、質問で説明したすべての変更を除いて、私たちが行った唯一の変更です。このテンプレートタグはすべて、投稿を行うだけでなく、返信の親を設定することを示しています。そして、返信の親は{{comment}}あなたが返信している相手です。

したがって、「オリジナルに返信」が必要な場合は、を使用します{% get_comment_url post %}

また、特定のコメントに返信する場合は、を使用します{% get_comment_url post comment %}

于 2012-09-02T07:31:46.533 に答える
0

賢明な一言:Django(またはコーディング)に不慣れで、デモや学習の目的で単純なものを構築している場合は、スレッド化されたコメントを使用しないでください。それは価値があるよりも多くの仕事です。簡単なコメントモデルを自分で作成するだけです。そうは言っても、@ aksharの応答と非常によく似た、応答を機能させる方法は次のとおりです。

list.html:

{% load threadedcomments_tags %}
<div id="comments">
    {% for comment in comment_list|fill_tree|annotate_tree %}
        {% if comment.open %}
            <ul>
        {% else %}
            </li>
        {% endif %}
        <li id="c{{ comment.id }}">{# c## is used by the absolute URL of the Comment model, so keep that as it is. #}
            <dl class="comment">
                <dt>
                    {{ comment.submit_date }} - {{ comment.name }}, ID: {{ comment.id }} <i>To test parent:{{ comment.parent_id }}</i>
                </dt>
                <dd>
                    {{ comment.comment|linebreaks }}
                    {% render_comment_form for object with comment.id %}
                </dd>
            </dl>
            {% for close in comment.close %}</li></ul>{% endfor %}
    {% endfor %}
</div>
于 2018-09-27T14:50:47.947 に答える