Простой блог на Django - часть 8. Создание списка постов на главной странице и шаблона страницы отдельного поста
Прежде чем пойдём дальше, нам потребуется создать несколько постов, чтобы было с чем работать. После этого создадим два шаблона, которые будут наследоваться от базового.
Создание шаблона отдельного поста
Сначала пропишем маршрут в posts/urls.py:
path("<int:post_id>/", views.post_view, name="post"),
Он указывает на View функцию post_view Создадим её:
def post_view(request, post_id):
post = get_object_or_404(Post, id=post_id)
context = {
'post': post,
}
return render(request, 'post.html', context)
Далее в папке templates создадим шаблон post.html У нас уже есть базовый шаблон index.html, поэтому просто отнаследуемся от него:
{% extends "index.html" %}
Пришло время перейти к тем частям, которые будут от страницы к странице меняться. Это заголовок H1 и title, который в дочернем шаблоне мы переопределим так:
{% block title %} {{ post.title }} {% endblock %}
{% block h1 %} {{ post.title }} {% endblock %}
Теперь пришло время заняться выводом контента. Смотрим как эта секция у нас называется в базовом шаблоне. Ага, это content. Значит, как и по аналогии с заголовком, сделать это можно следующим образом:
{% block content %}
{{ post.text }}
{% endblock %}
Создание шаблона по выводу списка постов
За вывод постов отвечает страница index.html, она же у нас выполняет 2 роли:
- Используется в качестве базового шаблона.
- Выполняет непосредственно роль шаблона для главной страницы.
Править мы будем именно секцию content. Постов у нас будет несколько, поэтому выводить их проще в цикле:
{% for post in posts %}
{% include "includes/post_in_cat.html" with post=post %}
{% endfor %}
Файл по пути templates/includes/post_in_cat.html будет следующего содержания:
<div class="post-preview">
<a href="{% url 'post' post.id %}">
<h2 class="post-title">
{{ post.title }}
</h2>
<h3 class="post-subtitle">
{{ post.text | truncatechars:255 }}
</h3>
</a>
<p class="post-meta">Posted by
<a href="#">{{ post.author }}</a>
on {{ post.pub_date }}</p>
</div>
<hr>
Теперь если обновить главную страницу, то можно увидеть весь список постов с их кратким содержанием. По ним можно покликать, при этом будет осуществлен переход на детальную страницу содержимого самого поста.
Изменения в этой заметке можно посмотреть в этом коммите https://github.com/maclen2007/simple_django_blog/commit/7a6c2e8733a608b4496f1d3ddf36e56aa4c572e7
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()