django комментарии в коде

57059 просмотра

4 ответа

49623 Репутация автора

Я хотел бы прокомментировать это с помощью строки

Ответы (4)

86 плюса

23745 Репутация автора

Автор: Miles Размещён: 06.04.2009 12:04

219 плюса

35808 Репутация автора

В качестве ответа Майлза <% comment %>. <% endcomment %>используется для многострочных комментариев, но вы также можете прокомментировать текст в той же строке, как это:

Автор: Van Gale Размещён: 06.04.2009 12:13

21 плюса

280042 Репутация автора

Используя <# #>обозначения, например:

Автор: mipadi Размещён: 06.04.2009 12:13

2 плюса

446 Репутация автора

В отличие от традиционных html-комментариев :

Комментарии шаблона Django не отображаются в финальном html. Таким образом, вы можете свободно размещать детали реализации там, например:

Взявшись за реализацию комментариев на сайте под Django, я с удивлением обнаружил, что Django не предоставляет никаких модулей для реализации комментариев. Вернее он предоставлял его раньше, это был модуль django.contrib.comments , но в версии 1.7 его объявили как deprecated и предложили либо пилить самостоятельно, либо воспользоваться чем-нибудь вроде Disqus. Хорошо, он вроде тоже поддерживает подсветку синтаксиса кода, но. в статьях одна подсветка, в комментариях другая — это будет некрасиво.

Поэтому будем внедрять собственный велосипед и ловить свои баги.

Для реализации комментариев необходимо:

  • Добавить новую модель, назовём её Comment;
  • Добавить представление, которое будет обрабатывать добавление комментария;
  • Добавить форму для ввода комментария;
  • Воспользоваться для организации древовидной структуры подходом Materialized Path ;

Модель Comment

Модель комментариев будет содержать следующие поля:

  • path — будет содержать массив целочисленных значений, который будет содержать полный путь к корню. Как было сказано в статье по Materialized Path, это ID всех родительских элементов;
  • article_id — внешний ключ на статью, в которой находится комментарий;
  • author_id — внешний ключ на автора комментарий;
  • content — сам комментарий;
  • pub_date — дата и время публикации комментария;

Помимо этого даны методы get_offset() , который будет определять уровень сдвига комментария по длине пути, и get_col() , который будет определять количество колонок в сетке, которые будет занимать комментарий, а также переопределён метод __str__ , который будет отвечать за отображение части содержимого комментария в админке.

Сдвиг и количество колонок будут организовывать древовидное отображение комментариев на странице, но сдвиг будет не более 6 колонок, поскольку на данный момент сетка разбивается на 12 колонок.

Файл urls.py

Комментарий отправляет на сайт с помощью POST запроса по определённому адресу, который необходимо описать в файле urls.py.

Как я уже говорил во многих статьях, я работаю в модуле knowledge со статьями и разделами, но на этот раз я вынес статьи в отдельный модуль, чтобы унифицировать URL статей, чтобы они не зависели от разделов и не терялась индексация в том случае, если статья будет перемещена в другой раздел. Поэтому теперь работа идёт с модулем post . Туда же будет отправлен и комментарий. Отправляться комментарий в итоге будет по пути post/comment/12, если пользователь комментирует статьи с >

Форма комментария

Форма комментария будет помещена в отдельный файл forms.py.

Обработка формы и сохранение комментария будет происходить в представлении, поэтому метода save здесь нет. Данная форма служит лишь для ввода комментария и отсылки его на сервер.

Поле parent_comment очень важное, поскольку оно будет содержать ID родительского комментария, которое будет автоматически подставляться при ответе на один из комментариев под статьёй. Пользователь его заполнять не будет и оно будет скрытым. К тому же его заполнение не является обязательным, поскольку комментарий может относиться непосредственно к статье.

Ну а отношение к определённому комментарию делается с помощью JavaScript скрипта.

Представления

Для добавления комментария я ограничился лишь методом, без всякого представления, тем более, что декоратор @login_required проще прикручивается к методу, чем к представлению.

Также было модифицировано представление отвечающее за отображение статьи, поскольку необходимо было включить форму комментария в контекст отдаваемой страницы статьи, если, конечно, пользователь авторизован.

Шаблон статьи с комментарием

Я уже говорил, что использую модуль django-bootstrap3 для вёрстки страниц? Поэтому не удивляйтесь тому, как свёрстан этот шаблон.

Комментарии представляют собой обычные строки в Grid системе Bootstrap, а древовидность достигается за счёт сдвига колонок.

Очень важным здесь является наличие у каждой строки >

По этому же ID с помощью JavaScript будет перемещаться форма комментария по странице. А помещаться форма будет с помощью функции show_comments_form(). Данная функция помещается в обработчик ссылки «Ответить», у каждого комментария, а также в обработчик ссылки, просто для написания комментария. Данная функция использует библиотеку jQuery. Поэтому не забываем её подключить в вашем базовом шаблоне. У меня подключается та версия, которая используется с Bootstrap.

JavaScript для перемещения комментариев по странице

Ну тут всё просто до безобразия. Если . В противном случае заполняем скрытое поле и помещаем его под комментарием, под которым даём ответ.

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуем хостинг TIMEWEB

Рекомендуемые статьи по этой тематике

Есть комментарий, у него кнопка reply. По нажатию открывается формочка с input для нового коммента и кнопка отправить.
Идея — по нажатию отправить — добавлять к POST запросу аттрибут, который передает родительский комментарий и во вьюхе принимать его и сохранять комментарий с родительским.
Вопрос в том, как в запрос передать название родительского комментария?

  • Вопрос задан более года назад
  • 171 просмотр

Вадим Шаталов,
Хорошо, делаю так, внутри формы

Оцените статью