Книга «Изучаем Python»


Рис. 18.4. Страница со списком тем 404



Pdf көрінісі
бет245/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   241   242   243   244   245   246   247   248   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

Рис. 18.4.
Страница со списком тем


404
Глава 18 • Знакомство с Django
Страницы отдельных тем
Следующим шагом станет создание страницы для вывода информации по одной 
теме, с названием темы и всеми записями по этой теме. Мы снова определим новую 
схему 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\d+)/$', views.topic, name='topic'),
]
Рассмотрим регулярное выражение в схеме URL, 
r'^topics/(?P\d+)/$'

Символ 
r
сообщает Django, что последующая строка должна интерпретироваться 
без дополнительной обработки, а выражение заключено в кавычки. Вторая часть 
выражения, 
/(?P\d+)/
, описывает целое число, заключенное между двумя 
косыми чертами; это целое число сохраняется в аргументе 
topic_id
. Круглые скоб-
ки, в которые заключена эта часть выражения, сохраняют значение из URL; часть 
?P
сохраняет совпавшее значение в 
topic_id
; а выражение 
\d+
совпадает 
с любым количеством цифр, заключенных между символами косой черты.
Когда Django находит URL-адрес, соответствующий этой схеме, вызывается функ-
ция представления 
topic()
, в аргументе которой передается значение, хранящееся 
в 
topic_id
. Значение 
topic_id
используется для получения нужной темы внутри 
функции.
Представление отдельной темы
Функция 
topic()
должна получить тему и все связанные с ней записи из базы 
данных:
views.py
--snip--
 
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)


Построение других страниц
405
Это первая функция представления, которой требуется параметр, отличный 
от объекта запроса. Функция получает значение, совпавшее с выражени-
ем 
(?P\d+)
, и сохраняет его в 
topic_id

. В точке 

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

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

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

.


Достарыңызбен бөлісу:
1   ...   241   242   243   244   245   246   247   248   ...   266




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

    Басты бет