Найти в Дзене
And.Action

Начал изчать Django FrameWork ч.10 Читаем наши посты.

Может быть вы заметили, у нас есть кнопка: прочитать пост "READ". Давайте сделаем так, чтобы при нажатии на кнопку мы перешли на страницу конкретного поста. Создадим страницу поста:
blog/templates/blog/post_detail.html Расширяем базовый шаблон, добавляем title и header, а в блоке content вставляем карточку, которая у нас была внутри цикла. Тут цикла не нужен, потому что у нас конкретный один пост. В карточке у нас присутствует:
{{ post.published }} - дата публикации поста
{{ post.title }} - заголовок поста
{{ post.text }} - текст поста
{% url 'post_list' %} - а так мы оформляем кнопку возвращения к списку постов, с помощью специального синтаксиса Django. В ковычках указывается имя пути до шаблона post_list, то как мы написали его в файле blog/urls.py:
path('', views.post_list, name='post_list'), Так, шаблон мы создали. Теперь надо сделать кнопку, чтобы если мы хотим прочитать конкретный пост, кнопка перенаправляла нас на этот пост.
Открываем файл blog/views.py и делаем импорт специаль

Может быть вы заметили, у нас есть кнопка: прочитать пост "READ". Давайте сделаем так, чтобы при нажатии на кнопку мы перешли на страницу конкретного поста.

Создадим страницу поста:
blog/templates/blog/post_detail.html

-2

Расширяем базовый шаблон, добавляем title и header, а в блоке content вставляем карточку, которая у нас была внутри цикла. Тут цикла не нужен, потому что у нас конкретный один пост. В карточке у нас присутствует:
{{ post.published }} - дата публикации поста
{{ post.title }} - заголовок поста
{{ post.text }} - текст поста
{% url 'post_list' %} - а так мы оформляем кнопку возвращения к списку постов, с помощью специального синтаксиса Django. В ковычках указывается имя пути до шаблона post_list, то как мы написали его в файле blog/urls.py:
path('', views.post_list,
name='post_list'),

Так, шаблон мы создали. Теперь надо сделать кнопку, чтобы если мы хотим прочитать конкретный пост, кнопка перенаправляла нас на этот пост.


Открываем файл blog/views.py и делаем импорт специальной функции, которая убережёт нас от ненужных ошибок:
from django.shortcuts import render,
get_object_or_404

Суть её в том, что она берёт объект из базы, а в случае если его там нет, возвращает пользователю 404 ошибку("Not Found")

Создаём функцию post_detail:

-3

Разберём что за загадочный pk:

Дело в том, что pk — это primary key (первичный ключ). Он определяет каждую запись в базе данных. Django создал такой ключ за нас (по умолчанию это порядковый номер, то есть 1, 2, 3…) и добавил поле pk к каждой записи блога.


Открываем файл blog/urls.py и добавляем в наш список urlpatterns новый маршрут:

urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]

post/ значит, что после начала строки URL должен содержать слово post и косую черту /

<int:pk> — означает, что Django ожидает целочисленное значение и преобразует его в представление — переменную pk.

Переходим в файл blog/templates/blog/post_list.html:
Редактируем кнопку, вставляя туда ссылку на пост:
<a href="
{% url 'post_detail' pk=post.pk %}" class="btn btn-primary">Read</a>

Вот и всё. Если у вас, что-то не получилось, пишите вопросы. Спасибо за внимание учимся Django вместе.