Link Search Menu Expand Document

Обратное разрешение адресов

Напишем возможность перехода на отдельные страницы конкретной новости или конкретной категориищ.

Для этого создадим функцию 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)