В проекте используется следующий HTML-код для формирования гиперссылок на рубрики:
<a href="/bboard/{{ rubric.pk }}">{{ rubric.name }}</a>
Ссылка на целевую страницу, подставляемая в атрибут href, формируется из префикса bboard с добавлением ключа рубрики. Это работает, но в дальнейшем может доставить неудобство. К примеру, если возникнет необходимость изменить префикс, придется изменять код во всех используемых шаблонах.
Избежать такой ситуации поможет обратное разрешение интернет-адресов. Данный инструмент Django представляет собой специальный тег шаблонизатора, который формирует интернет-адрес, беря за основу имя маршрута, в котором он записан. Также могут использоваться URL-параметры, если используется параметризированный маршрут.
Сначала нужно добавить имена маршрутов, сделав их именованными. Откроем файл urls.py пакета приложения и изменим код, формирующий маршруты:
. . . urlpatterns = [ path('<int:rubric_id>/', by_rubric, name='by_rubric'), path('', index, name='index'), ]
Для указания имени служит именованный параметр name функции path(). Далее необходимо вставить в код гиперссылок специальные теги шаблонизатора url. Именно они и обеспечивают обратное разрешение адресов. Откроем созданный ранее шаблон bboard\index.html и найдем строку:
<a href="/bboard/{{ rubric.pk }}/">
ее нужно заменить на:
<a href="{% url 'by_rubric' rubric.pk %}">
Первый параметр тега – имя маршрута, далее идут значения URL-парметров.
Далее найдем код, формирующий ссылку на главную страницу:
<a href="/board/">
Заменим на:
<a href="{% url 'index' %}">
Данный маршрут не является параметризированным, поэтому URL-параметры отсутствуют.
Аналогично можно исправить все остальные ссылки используемые в шаблонах. После обновления страницы в браузере пробуем перейти по всем ссылкам – все ссылки должны быть корректными.