Видоизменение представлений
Теперь необходимо видоизменить параметры представления post_detail, чтобы они соответствовали новым параметрам URL-адреса, и использовать их для извлечения соответствующего объекта Post.
Откройте файл views.py и отредактируйте представление post_detail, как показано ниже:
def post_detail(request, year, month, day, post):
post = get_object_or_404(Post,
status=Post.Status.PUBLISHED,
slug=post,
publish__year=year,
publish__month=month,
publish__day=day)
return render(request,
'blog/post/detail.html',
{'post': post})
Мы видоизменили представление post_detail, чтобы использовать аргументы year, month, day и post и извлекать опубликованный пост с заданным слагом и датой публикации.
Ранее, добавив в поле slug значение параметра unique_for_date='publish' модели Post, мы обеспечили, чтобы был только один пост со слагом на заданную дату. Таким образом, используя дату и слаг, можно извлекать одиночные посты.
Видоизменение канонического URL-адреса постов
Также необходимо видоизменить параметры канонического URL-адреса для постов блога, чтобы они сочетались с новыми параметрами URL-адреса.
Откройте файл models.py приложения blog и отредактируйте метод get_absolute_url(), как показано ниже:
class Post(models.Model):
# ...
def get_absolute_url(self):
return reverse('blog:post_detail',
args=[self.publish.year,
self.publish.month,
self.publish.day,
self.slug])
Запустите сервер разработки, набрав следующую ниже команду в командной оболочке:
python manage.py runserver
Далее можно вернуться в свой браузер и кликнуть по одному из заголовков постов, чтобы посмотреть детальную информацию о посте. Вы должны увидеть что-то вроде этого:
Взгляните на URL-адрес – он должен выглядеть как http://127.0.0.1:8000/blog/2023/5/20/kak-rabotaet-django/.
Вы разработали дружественные для поисковой оптимизации URL-адреса постов блога.