Django重定向失败:点击链接生成嵌套路径报错如何解决
问题原因
你的路由配置本身没有问题,跳转异常是因为页面内的链接使用了无首斜杠的相对路径,浏览器会默认将该路径拼接在当前页面的父路径后,才会出现/maps/reports的错误地址。
解决方法
有两种常用的实现方案,优先推荐第一种Django原生规范方案:
方案1:使用Django URL命名+模板标签(推荐)
这是Django官方推荐的最佳实践,避免硬编码路径,后续修改路由也无需同步改动模板:
- 先给
urls.py里的每个路由添加name参数做唯一标识:
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('login/', views.login, name='login'), path('maps/', views.maps, name='maps'), path('profile/', views.profile, name='profile'), path('preferences/', views.preferences, name='preferences'), path('register/', views.register, name='register'), path('reports/', views.reports, name='reports'), path('weather/', views.weather, name='weather'), path('help/', views.help, name='help'), ]
- 将模板内所有跳转链接的
href属性替换为Django的{% url %}模板标签,比如指向reports的链接写法如下:
<a href="{% url 'reports' %}">报告页面</a>
该标签会自动生成从根路径开始的正确绝对路径,无论当前处于哪个页面都不会出现路径嵌套问题。
方案2:给链接路径添加首斜杠
如果不想改动路由配置,可以直接修改模板内的链接写法,给所有路径开头添加斜杠/,代表从网站根路径开始解析:
将原来的
<a href="reports">报告页面</a>
修改为
<a href="/reports">报告页面</a>
即可直接跳转至localhost/reports,但该方案属于硬编码,后续如果调整路由路径需要同步修改所有对应模板的链接。
内容的提问来源于stack exchange,提问作者Shubhangi Dutt
相关产品推荐
相关产品推荐

