如何让Django正确生成页面跳转链接,避免相对路径拼接错误?
Django导航链接路径拼接错误解决方案
问题根本原因
导航栏中的链接使用了无开头斜杠的相对路径,浏览器会默认将相对路径拼接在当前页面的路径之后,因此访问/3页面时点击home链接会自动拼接为/3/home。
解决方案
方案1:硬编码绝对路径(快速修复)
直接给导航栏所有链接的href属性值开头添加斜杠/,表示从站点根路径开始跳转:
- 原错误写法:
<a href="home">首页</a> - 修改后写法:
<a href="/home">首页</a>
同理样式页链接修改为<a href="/style">样式页</a>即可。
方案2:使用Django内置url模板标签(规范推荐)
这是Django官方推荐的路径管理方式,避免硬编码路径后续维护困难:
- 先给
urls.py中的路由配置添加name标识:
urlpatterns = [ path('home', views.home, name='home'), path('style', views.style, name='style'), # 迷宫详情路由保持原有逻辑不变,也可新增name方便后续调用 path('<int:maze_id>', views.get_maze, name='maze_detail'), ]
- 将导航栏的
href属性替换为模板标签写法:
<a href="{% url 'home' %}">首页</a> <a href="{% url 'style' %}">样式页</a>
Django会自动根据name对应生成正确的根路径跳转链接,无论当前在哪个子页面都不会出现路径拼接错误。
修改完成后重启Django服务、清空浏览器缓存即可生效。
内容的提问来源于stack exchange,提问作者comalley_
相关产品推荐
相关产品推荐

