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


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

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

08.07.2011 18:42  Ключевые словаcomments , django

Автор блога создает, продвигает и поддерживает сайты для бизнеса

  • Быстрая и качественная разработка сайтов/приложений
  • Качественная и продуманная SEO подготовка
  • Продвижение через Яндекс.Директ и Гугл.Адвордс


Комментарии: [19]

18:57 04.03.2016  owlman

Ну как? Работает? :)

18:06 04.03.2016  some

Еще один тест

18:06 04.03.2016  some

Тест

17:04 27.10.2013  owlman

Я так полагаю вопрос про валидацию. Средствами Джанги при неправильном вводе можно реализовать отклик только с перегрузкой страницы.
Но Django дружелюбный фреймворк и позволяет реализовать AJAX валидацию форм.
А вот она в свою очередь работает без перехода на другую страницу при ошибке.
Так что покопайте в сторону AJAX + Django.

16:13 27.10.2013  Ольга

А как сделать чтоб при ошибке на отдельную страницу не отправлял? или только писать свою views?

23:05 01.03.2013  owlman

Писать свое приложение комментариев или переопределить форму комментариев и "подпилить" в ней то, что надо.

16:31 01.03.2013  Влад

А как изменить размер поля под комментарий? Пробовал оборачивать {{form.comment}}, но это не работает. Спасибо!

12:49 01.03.2013  owlman

Что такое next в комментариях, лучше всего написано в документации.
Проверка на next к данному посту не относится.
Из кода удалил.
Спасибо за внимательность. :)

12:11 01.03.2013  Влад

Здравствуйте!
А что за проверка {% if next %}?

11:56 27.02.2013  Влад

Вопрос снят. Напутал с RequestContext

11:51 27.02.2013  owlman

Здравствуйте! Представленный код писался еще на 1.3 версии. Возможно, что-то могло измениться.
Стоит заглянуть в документацию по джанге.
Я пока не переходил.

11:27 27.02.2013  Влад

Здравствуйте! Использую джанго 1.5. При отправке получаю ошибку CSRF verification failed. Request aborted. Не могу понять в чем дело. {% csrf_token %} в вашей форме есть, в settings тоже все настроено, т.к. другие формы на сайте работают при наличии {% csrf_token %}

15:29 23.04.2012  owlman

Два варианта:
1. При объявлении в модели класса CommentModerator добавить свои условия модерации в
def moderate(self, comment, content_object, request) (подробнее в документации можно глянуть, там все просто)

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

Я выбрал первое.

15:23 23.04.2012  diascom

как сделать так, чтобы комментарии публиковались только после проверки модератором

2:09 16.04.2012  DOOMer

А не, все отбой . Это я со старого ноута выходил в сеть, и глаза изначально не распарсили что скобки немного разные [ и {{ а не три подряд {{{

Так что все ок =)

0:03 16.04.2012  owlman

Странно. Я на всяк случай даже в исходник шаблона этой страницы заглянул.
Там именно так скобки стоят и все как видите работает не ругаясь.
Даже интересно стало, а откуда информация, что парсер ругается на - "[{{"?

23:50 15.04.2012  DOOMer

Тройные скобки [{{ джанговский парсер шаблонов ведь не прожует, выдаст TemplateSyntaxError.

23:33 15.04.2012  owlman

Спасибо за внимание, но где опечатка? о_0

21:52 15.04.2012  DOOMer

Опечатку в "Комментарии: [{{ comment_count }}]" поправьте, пл.


Добавить комментарий

Внимание! HTML код и ссылки в комментариях отключены.
Комментарии содержащие ссылки, публикуются после модерации.
Имя:


e-mail:



Комментарий:
 

  
   
Λ