Читаем Изучаем Python онлайн бесплатно
В цикле каждая тема должна быть преобразована в элемент маркированного списка. Чтобы вывести значение переменной в шаблоне, заключите ее имя в двойные фигурные скобки. Код {{ 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, которые встречались нам ранее, потому что в ней используется атрибут 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)




