#django #threaded-comments
#django #threaded-комментарии
Вопрос:
Я пытаюсь интегрировать 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
форму, но при этом комментарии вообще не являются потоковыми.
Я был бы очень благодарен за вашу помощь.
P.S. На самом деле, я не очень доволен тем, как это приложение работает с django 1.3, поэтому предложение альтернативы тоже было бы отличным ответом.
Ответ №1:
Похоже, что django threadedcommetns здесь не очень популярны 🙂
Я нашел отличную библиотеку: django-mptt
Вот мое руководство, в котором описывается, как реализовать многопоточные комментарии в django с использованием django-mptt: http://codeblogging.net/blogs/1/3 /
Комментарии:
1. Чувак, у тебя ошибка при установке django, и ты оставил DEBUG = True
2. ссылка на учебник не работает.
Ответ №2:
В форме есть div «id_parent», измените значение на идентификатор родителя.
с помощью jQuery что-то вроде этого:
$('#commentForm').find("#id_parent").attr("value", divid);
Ответ №3:
Ваш ответ на original выглядит хорошо.
<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 %}
.
Ответ №4:
Слово мудрецу: если вы новичок в 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>