Обратное разрешение адресов
Напишем возможность перехода на отдельные страницы конкретной новости или конкретной категориищ.
Для этого создадим функцию 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)