Создание шаблона списка постов
Давайте отредактируем файл post/list.html и придадим ему следующий вид:
{% extends "blog/base.html" %}
{% block title %}My Blog{% endblock %}
{% block content %}
<h1>My Blog</h1>
{% for post in posts %}
<h2>
<a href="{% url 'blog:post_detail' post.id %}"> {{ post.title }}</a>
</h2>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body|truncatewords:30|linebreaks }}
{% endfor %}
{% endblock %}
Шаблонный тег {% extends %} сообщает Django, что надо наследовать от шаблона blog/base.html.
Затем заполняются блоки title и content базового шаблона.
Посты прокручиваются в цикле, и их заголовок, дата, автор и тело отображаются на странице, включая ссылку в заголовке на подробный URL-адрес поста.
URL-адрес формируется с использованием предоставляемого веб-фреймворком Django шаблонного тега {% url %}.
Этот шаблонный тег позволяет формировать URL-адреса динамически по их имени.
Мы используем blog:post_detail, чтобы ссылаться на URL-адрес post_detail в именном пространстве blog.
Мы передаем необходимый параметр post.id, чтобы сформировать URL-адрес для каждого поста.
Для формирования URL-адресов в своих шаблонах следует всегда использовать шаблонный тег {% url %}, а не писать жестко привязанные URL-адреса. Такой подход упростит техническое сопровождение URL-адресов в будущем.
В теле поста применяются два шаблонных фильтра: truncatewords усекает значение до указанного числа слов, а linebreaks конвертирует результат в разрывы строк в формате HTML. При этом можно конкатенировать столько шаблонных фильтров, сколько потребуется; каждый из них будет применен к результату, сгенерированному предыдущим.
Доступ к приложению
Откройте командную оболочку и исполните следующую ниже команду, что-бы запустить сервер разработки:
python manage.py runserver
Пройдите по URL-адресу http://127.0.0.1:8000/blog/ в своем браузере, вы увидите, что все работает.
Обратите внимание, что для того чтобы можно было отобразить здесь посты, необходимо иметь несколько постов со статусом PUBLISHED.
Вы должны увидеть что-то вроде этого:
Создание шаблона детальной информации о посте
Далее отредактируйте файл post/detail.html:
{% extends "blog/base.html" %}
{% block title %}{{ post.title }}{% endblock %}
{% block content %}
<h1>{{ post.title }}</h1>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body|linebreaks }}
{% endblock %}
Затем можно вернуться в свой браузер и кликнуть по одному из заголовков постов, чтобы просмотреть детальную информацию о посте.
Вы должны увидеть что-то вроде этого:
Взгляните на URL-адрес - он должен содержать автоматически генерируемый id поста. Например: /blog/1/.