Django комментарии

26694 19


В процессе изучения Django очередной раз столкнулся с тем, что лучше чем в официальной документации нигде информации не найти. Но написана она на английском и не всегда с первого раза понятно, что к чему.

Вот и со стандартным приложением Comments такая же история. Вроде все понятно, но...  
Короче говоря, по шагам описываю то, как я реализовал комментарии на сайте, основываясь на официальной документации django 1.3.

 

Шаг 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#}, а так пользуемся тем, что подгружается на страницу с постом. 
Возможно, это неправильно. Как только пойму, что неправильно и почему, сразу же исправлю.

После этих несложных шагов все должно работать!

Комментарии

4 марта 2016 г. 18:57 owlman
Ну как? Работает? :)
4 марта 2016 г. 18:06 some
Еще один тест
4 марта 2016 г. 18:06 some
Тест
27 октября 2013 г. 17:04 owlman
Я так полагаю вопрос про валидацию. Средствами Джанги при неправильном вводе можно реализовать отклик только с перегрузкой страницы.
Но Django дружелюбный фреймворк и позволяет реализовать AJAX валидацию форм.
А вот она в свою очередь работает без перехода на другую страницу при ошибке.
Так что покопайте в сторону AJAX + Django.
27 октября 2013 г. 16:13 Ольга
А как сделать чтоб при ошибке на отдельную страницу не отправлял? или только писать свою views?
1 марта 2013 г. 23:05 owlman
Писать свое приложение комментариев или переопределить форму комментариев и "подпилить" в ней то, что надо.
1 марта 2013 г. 16:31 Влад
А как изменить размер поля под комментарий? Пробовал оборачивать {{form.comment}}, но это не работает. Спасибо!
1 марта 2013 г. 12:49 owlman
Что такое next в комментариях, лучше всего написано в документации.
Проверка на next к данному посту не относится.
Из кода удалил.
Спасибо за внимательность. :)
1 марта 2013 г. 12:11 Влад
Здравствуйте!
А что за проверка {% if next %}?
27 февраля 2013 г. 11:56 Влад
Вопрос снят. Напутал с RequestContext
27 февраля 2013 г. 11:51 owlman
Здравствуйте! Представленный код писался еще на 1.3 версии. Возможно, что-то могло измениться.
Стоит заглянуть в документацию по джанге.
Я пока не переходил.
27 февраля 2013 г. 11:27 Влад
Здравствуйте! Использую джанго 1.5. При отправке получаю ошибку CSRF verification failed. Request aborted. Не могу понять в чем дело. {% csrf_token %} в вашей форме есть, в settings тоже все настроено, т.к. другие формы на сайте работают при наличии {% csrf_token %}
23 апреля 2012 г. 15:29 owlman
Два варианта:
1. При объявлении в модели класса CommentModerator добавить свои условия модерации в
def moderate(self, comment, content_object, request) (подробнее в документации можно глянуть, там все просто)

2. Написать своё приложение комментариев.

Я выбрал первое.
23 апреля 2012 г. 15:23 diascom
как сделать так, чтобы комментарии публиковались только после проверки модератором
16 апреля 2012 г. 2:09 DOOMer
А не, все отбой . Это я со старого ноута выходил в сеть, и глаза изначально не распарсили что скобки немного разные [ и {{ а не три подряд {{{

Так что все ок =)
16 апреля 2012 г. 0:03 owlman
Странно. Я на всяк случай даже в исходник шаблона этой страницы заглянул.
Там именно так скобки стоят и все как видите работает не ругаясь.
Даже интересно стало, а откуда информация, что парсер ругается на - "[{{"?
15 апреля 2012 г. 23:50 DOOMer
Тройные скобки [{{ джанговский парсер шаблонов ведь не прожует, выдаст TemplateSyntaxError.

15 апреля 2012 г. 23:33 owlman
Спасибо за внимание, но где опечатка? о_0
15 апреля 2012 г. 21:52 DOOMer
Опечатку в "\Комментарии: [{{ comment_count }}]\" поправьте, пл.

Контактные данные

 Россия, г. Москва