Простой блог на 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 роли: 

  1. Используется в качестве базового шаблона. 
  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

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.