Это первая функция представления, которой требуется параметр, отличный от объекта запроса. Функция получает значение, совпавшее с выражением (?P\d+), и сохраняет его в topic_id (1) . В точке (2) функция get() ­используется для получения темы (по аналогии с тем, как мы это делали в оболочке Django). В точке (3) загружаются записи, связанные с данной темой, и они упорядочиваются по значению date_added: знак «минус» перед date_added сортирует результаты в обратном порядке, то есть самые последние записи будут находиться на первых местах. Тема и записи сохраняются в словаре context (4), который передается ­шаблону topic.html (5).

Примечание

Выражения в строках (2) и (3), обращающиеся к базе данных за конкретной информацией, называются «запросами». Когда вы пишете подобные запросы для своих проектов, сначала опробуйте их в оболочке Django. Вы сможете проверить результат намного быстрее, чем если напишете представление и шаблон, а затем проверите результаты в браузере.

<p>Шаблон отдельной темы</p>

В шаблоне должно отображаться название темы и текст записей. Также необходимо сообщить пользователю, если по теме еще не было сделано ни одной записи:

topic.html

{% extends 'learning_logs/base.html' %}

{% block content %}

(1)

Topic: {{ topic }}

Entries:

(2)

    (3) {% for entry in entries %}

    . .

  • (4) . .

    {{ entry.date_added|date:'M d, Y H:i' }}

    (5) . .

    {{ entry.text|linebreaks }}

    . .

    ? {% empty %}

    . .

  • . . There are no entries for this topic yet.

    . .

    {% endfor %}

    {% endblock content %}

    Шаблон расширяет base.html, как и для всех страниц проекта. Затем выводится текущая тема (1) из шаблонной переменной {{ topic }}. Переменная topic доступна, потому что она включена в словарь context. Затем создается маркированный список со всеми записями по теме (2); перебор записей осуществляется так же, как это делалось ранее для тем (3).

    С каждым элементом списка связываются два значения: временна?я метка и полный текст каждой записи. Для временнуй метки (4) выводится значение атрибута date_added. В шаблонах Django вертикальная черта (|) представляет фильтр — функцию, изменяющую значение шаблонной переменной. Фильтр date:'M d, Y H:i' выводит временны?е метки в формате January 1, 2015 23:00. Следующая строка выводит полное значение text (вместо первых 50 символов каждой записи). Фильтр linebreaks (5) следит за тем, чтобы длинный текст содержал разрывы строк в формате, поддерживаемом браузером (вместо блока непрерывного текста). В точке ? шаблонный тег {% empty %} используется для вывода сообщения об отсутствии записей.

    <p>Ссылки на странице</p>

    Прежде чем просматривать страницу отдельной темы в браузере, необходимо изменить шаблон списка тем, чтобы каждая тема вела на соответствующую страницу. Внесите следующие изменения в topics.html:

    topics.html

    ...

    {% for topic in topics %}

    . .

  • . . . .{{ topic }}

    . .

    {% empty %}

    ...

    Шаблонный тег URL используется для генерирования ссылки на основании схемы URL из learning_logs с именем 'topic'. Этой схеме URL необходим аргумент topic_id, поэтому в шаблонный тег URL добавляется атрибут topic.id. Теперь каждая тема в списке представляет собой ссылку на страницу темы, например http://localhost:8000/topics/1/.

    Если теперь обновить страницу тем и щелкнуть на теме, открывается страница, изображенная на рис. 18.5.

    Рис. 18.5. Страница со списком всех записей по отдельной теме

    Упражнения

    18-7. Документация шаблона: просмотрите документацию по шаблонам Django по адресу https://docs.djangoproject.com/en/1.8/ref/templates/. Используйте ее в работе над собственными проектами.

    18-8. Страницы Pizzeria: добавьте страницу в проект Pizzeria из упражнения 18-6 (с. 398) с названиями видов пиццы. Свяжите каждое название пиццы со страницей, на которой выводится список дополнений к этой пицце. Обязательно примените наследование шаблонов, чтобы повысить эффективность построения страниц.

    <p>Итоги</p>
    Перейти на страницу:

    Все книги серии Библиотека программиста

    Похожие книги