В процессе изучения Django очередной раз столкнулся с тем, что лучше чем в официальной документации нигде информации не найти. Но написана она на английском и не всегда с первого раза понятно, что к чему.
Вот и со стандартным приложением Comments такая же история. Вроде все понятно, но...
Короче говоря, по шагам описываю то, как я реализовал комментарии на сайте, основываясь на
Шаг 1
Добавляем в setings.py
INSTALLED_APPS = (
...
'django.contrib.comments',
...
)
Не забываем после этого ./manage.py syncdb
Шаг 2
Добавляем в urls.py проекта
urlpatterns = patterns('',
...
url(r'^comments/', include('django.contrib.comments.urls')),
...
)
У меня почему-то нормально заработало только на второй позиции после url(r'^admin/', include(admin.site.urls)), почему-пока не понял.
Шаг 3
Вносим в шаблон отображение формы ввода комментария и список комментариев
{% load comments i18n %} {# Подгружаем комментарии #}
<h2>Разместить комментарий</h2> {% get_comment_form for {#Entry#} as form %}
{# Рисуем форму для ввода комментариев (просто. без изысков) #}
<form action="{% comment_form_target %}" method="post" >{% csrf_token %}
{{form.content_type}}{{form.object_pk}}{{form.timestamp}}{{form.security_hash}}
<table width="100%">
<tr>
<td width="20%">
Имя:<br />
<p>{{form.name}}</p>
e-mail:<br />
<p>{{form.email}}</p>
WWW<em>(Ваш сайт)</em>:<br />
<p>{{form.url}}</p>
Поле для проверки на спамм. Оставьте его пустым.<br />
<p>{{form.honeypot}}</p>
</td>
<td width="80%">
Комментарий:<br />
{{form.comment}}
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="hidden" name="next" value="{# url #}" />
{# Для перехода к странице с нашим постом #}
<input type="submit" name="submit" class="submit-post"
value="{% trans "Post" %}" />
<input type="submit" name="preview" class="submit-preview"
value="{% trans "Preview" %}" />
</td>
</table>
</form>
{% get_comment_count for {#Entry#} as comment_count %}
{# Подгружаем список комментариев #}
<h2>Комментарии: [{{ comment_count }}]</h2>
{% get_comment_list for {#Entry#} as comment_list %}
{% for comment in comment_list|dictsortreversed:"submit_date" %}
{# Перебираем список комментариев в обратном хронологическом порядке #}
<dl id="comments">
{{ comment.name }} {{ comment.submit_date|date:"d.m.Y G:i" }}
{# Выводим имя комметатора и дату в нашем формате #}
<dd>
{{ comment.comment|striptags|urlizetrunc:20|linebreaksbr }}
{# Выводим содержание комментария убирая Html теги,
делая короткие ссылки и переводы строки в виде <br /> #}
</dd>
</dl>
{% endfor %}
<!--
{# Entry #} - Наша модель, содержащая статьи или посты блога
{# url #} - Относительный адрес нашей статьи, для которой выводим комментарии
-->
Конечно, можно было сделать так, как описано в документации.
Т.е. в templates добавить шаблоны form и list, но при этом у меня возникали трудности с {#url#}, а так пользуемся тем, что подгружается на страницу с постом.
Возможно, это неправильно. Как только пойму, что неправильно и почему, сразу же исправлю.
После этих несложных шагов все должно работать!
Комментарии
Но Django дружелюбный фреймворк и позволяет реализовать AJAX валидацию форм.
А вот она в свою очередь работает без перехода на другую страницу при ошибке.
Так что покопайте в сторону AJAX + Django.
Проверка на next к данному посту не относится.
Из кода удалил.
Спасибо за внимательность. :)
А что за проверка {% if next %}?
Стоит заглянуть в документацию по джанге.
Я пока не переходил.
1. При объявлении в модели класса CommentModerator добавить свои условия модерации в
def moderate(self, comment, content_object, request) (подробнее в документации можно глянуть, там все просто)
2. Написать своё приложение комментариев.
Я выбрал первое.
Так что все ок =)
Там именно так скобки стоят и все как видите работает не ругаясь.
Даже интересно стало, а откуда информация, что парсер ругается на - "[{{"?