Представление отдельной темы

We use cookies. Read the Privacy and Cookie Policy

Функция 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)

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

Примечание

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