Обратное разрешение адресов
Напишем возможность перехода на отдельные страницы конкретной новости или конкретной категориищ.
Для этого создадим функцию get_absolute_url
в нужном классе в файле models.py
. Также нам потребуется модуль reverse
для построения такой ссылки: from django.urls import reverse
В качестве viewname мы используем имя маршрута из urls.py
, вторым аргументом мы указываем необходимый параметр для построения маршрута.
def get_absolute_url(self):
return reverse('category', kwargs={"category_id": self.pk})
Далее в шаблоне мы вызываем этот метод для необходимых объектов: {{ item.get_absolute_url }}
Если перейти по адресу с несуществующим объектом, то Django нам выдаст ошибку 500. Для обхода этой ситуации необходимо использовать функцию get_object_or_404()
.
Для того чтобы ошиибка 404 корректно выдавалась, необходимо в функции вывода страницы конкретной нововсти вызывать не news_item = News.objects.get(pk=news_id)
, а news_item = get_object_or_404(News, pk=news_id)