М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет307/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   303   304   305   306   307   308   309   310   ...   334
Байланысты:
Изучаем Python

views.py
...

def topic(request, topic_id):
"""Выводит одну тему и все ее записи."""

topic = Topic.objects.get(id=topic_id)

entries = topic.entry_set.order_by('-date_added')

context = {'topic': topic, 'entries': entries}
❺ 
return render(request, 'learning_logs/topic.html', context)
Это первая функция представления, которой требуется параметр, отличный 
от объекта 
request
. Функция получает значение, совпавшее с выражением 
//
, и сохраняет его в 
topic_id

. В точке 

функция 
get()
ис-
пользуется для получения темы (по аналогии с тем, как мы это делали в оболочке 
Django). В точке 

загружаются записи, связанные с данной темой, и они упоря-
дочиваются по значению 
date_added
: знак «минус» перед 
date_added
сортирует 
результаты в обратном порядке, то есть самые последние записи будут находиться 
на первых местах. Тема и записи сохраняются в словаре 
context

, который пере-
дается шаблону 
topic .html

.


420
Глава 18 • Знакомство с Django
ПРИМЕЧАНИЕ
Выражения в строках 

и 

, обращающиеся к базе данных за кон-
кретной информацией, называются запросами . Когда вы пишете подобные запросы 
для своих проектов, сначала опробуйте их в оболочке Django . Вы сможете проверить 
результат намного быстрее, чем если напишете представление и шаблон, а затем про-
верите результаты в браузере .
Шаблон отдельной темы
В шаблоне должно отображаться название темы и текст записей. Также необходимо 
сообщить пользователю, если по теме еще не было сделано ни одной записи:
topic.html
{% extends 'learning_logs/base.html' %}
{% block content %}

Topic: {{ topic }}
Entries:



    {% for entry in entries %}


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

    {{ entry.text|linebreaks }}


  • {% empty %}
  • There are no entries for this topic yet.

  • {% endfor %}

{% endblock content %}
Шаблон расширяет 
base .html
, как и для всех страниц проекта. Затем выводится 
текущая тема 

из шаблонной переменной 
{{
topic
}}
. Переменная 
topic
доступ-
на, потому что она включена в словарь 
context
. Затем создается маркированный 
список со всеми записями по теме 

; перебор записей осуществляется так же, как 
это делалось ранее для тем 

.
С каждым элементом списка связываются два значения: временная метка и пол-
ный текст каждой записи. Для временной метки 

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

следит за тем, чтобы длинный текст содержал разрывы 
строк в формате, поддерживаемом браузером (вместо блока непрерывного текста). 
В точке 

шаблонный тег 
{%
empty
%}
используется для вывода сообщения об от-
сутствии записей.


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


Достарыңызбен бөлісу:
1   ...   303   304   305   306   307   308   309   310   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет