В цикле каждая тема должна быть преобразована в элемент маркированного списка. Чтобы вывести значение переменной в шаблоне, заключите ее имя в двойные фигурные скобки. Код {{ topic }} в точке (3) будет заменен значением topic при каждом проходе цикла. Фигурные скобки на странице не появятся; они всего лишь сообщают Django об использовании шаблонной переменной. Тег HTML
обозначает элемент списка. Все, что находится между тегами, в паре теговВ точке (4) находится шаблонный тег {% empty %}, который сообщает Django, что делать при отсутствии элементов в списке. В нашем примере выводится сообщение о том, что темы еще не созданы. Последние две строки завершают цикл for (5) и маркированный список ?.
Затем необходимо изменить базовый шаблон и включить ссылку на страницу с темами:
base.html
(1) Learning Log -
(2) Topics
{% block content %}{% endblock content %}
После ссылки на домашнюю страницу (1) добавляется дефис, после которого вставляется ссылка на страницу тем, которая также представлена шаблонным тегом (2). Эта строка приказывает Django сгенерировать ссылку, соответствующую схеме URL с именем 'topics', в learning_logs/urls.py.
Обновив домашнюю страницу в браузере, вы увидите ссылку Topics. Щелчок на этой ссылке открывает страницу, похожую на рис. 18.4.
Рис. 18.4. Страница со списком тем
Страницы отдельных тем
Следующим шагом станет создание страницы для вывода информации по одной теме, с названием темы и всеми записями по этой теме. Мы снова определим новую схему URL, напишем представление и создадим шаблон. Кроме того, на странице со списком тем каждый элемент маркированного списка будет преобразован в ссылку на соответствующую страницу отдельной темы.
Схема URL для отдельных тем
Схема URL для страницы отдельной темы немного отличается от других схем URL, которые встречались нам ранее, потому что в ней используется атрибут id темы для обозначения запрашиваемой темы. Например, если пользователь хочет просмотреть страницу с подробной информацией по теме Chess (id=1), эта страница будет иметь URL-адрес http://localhost:8000/topics/1/. Вот как выглядит схема для этого URL-адреса из learning_logs/urls.py:
urls.py
...
urlpatterns = [
...
. .# Страница с подробной информацией по отдельной теме
. .url(r'^topics/(?P
]
Рассмотрим регулярное выражение в схеме URL, r'^topics/(?P
Когда Django находит URL-адрес, соответствующий этой схеме, вызывается функция представления topic(), в аргументе которой передается значение, хранящееся в topic_id. Значение topic_id используется для получения нужной темы внутри функции.
Представление отдельной темы
Функция topic() должна получить тему и все связанные с ней записи из базы данных:
views.py
--snip--
(1) def topic(request, topic_id):
. ."""Выводит одну тему и все ее записи."""
(2) . .topic = Topic.objects.get(id=topic_id)
(3) . .entries = topic.entry_set.order_by('-date_added')
(4) . .context = {'topic': topic, 'entries': entries}
(5) . .return render(request, 'learning_logs/topic.html', context)