Как заставить Django правильно писать ссылки на страницы?
Я настроил свой сайт проекта Django, который представляет собой генератор лабиринтов, на навигационную панель, кнопки которой ссылаются на другие страницы, которые я сделал.
Например, каталог страницы стилей - просто /style, поэтому он вызывает страницу, на которую ссылается styles, затем, если я нажимаю кнопку homepage на навигационной панели, она переходит на /home все хорошо.
Но когда я перехожу на отдельные страницы лабиринта, ссылки на которые - это просто номер (например, 3), если я нажимаю на кнопку навигатора, чтобы перейти к домашней странице, вместо того, чтобы перейти к http://127.0.0.1:8000/home, он пытается перейти к http://127.0.0.1:8000/3/home, который не существует.
Есть ли способ изменить то, как Django обрабатывает ссылки, чтобы удалить каталог перед ним.
Предполагая, что ваш urls.py
настроен правильно, вы можете использовать тег шаблона {% url %}
следующим образом:
<a href="{% url 'urlname' %}">...</a>
И Django автоматически заменит его на реальный URL, называемый urlname
. Чтобы это работало, ваши urls.py
должны иметь пути, определенные следующим образом:
path("some/url/here", views.my_view_function, name="urlname")
Атрибут name
является здесь важной частью.
Написав href="3"
, вы просто указываете браузеру искать https://example.com/whatever/the/current/url/is/3
, другими словами, это относительный к текущей позиции.
Чтобы сделать его абсолютным, вы должны либо начать с /
(что сделает URL относительным к текущему домену, например href="3"
приведет к https://example.com/3
), либо написать его полностью, включая часть https://example.com/
, которая приведет именно туда, куда указано.
Django автоматически позаботится об этом, когда вы используете тег {% url %}
.