Тематические комментарии Django - как мне ответить на комментарий? - PullRequest
3 голосов
/ 11 мая 2011

Я пытаюсь интегрировать threadadedcommetns в мое приложение 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 форму, но с этим комментарии вообще не пронизаны.

Буду очень признателен за вашу помощь.

P.S. На самом деле, я не очень доволен тем, как это приложение работает с django 1.3, поэтому было бы неплохо предложить альтернативу.

Ответы [ 4 ]

6 голосов
/ 24 мая 2011

Похоже, что django threadadedcommetns не очень популярны здесь:)

Я нашел отличную библиотеку: django-mptt

Вот мой учебник, который описывает, как реализовать многопоточные комментарии в django, используя django-mptt: http://codeblogging.net/blogs/1/3/

3 голосов
/ 13 октября 2011

В форме есть "id_parent" div, измените значение на id родителя.

с jQuery примерно так:

$('#commentForm').find("#id_parent").attr("value", divid);
1 голос
/ 02 сентября 2012

Ваш ответ на оригинал выглядит хорошо.

<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 %}.

0 голосов
/ 27 сентября 2018

Слово мудрому: если вы новичок в 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>
...