Django教程03:添加specifics后URL末尾双斜杠问题排查与修复
Django URL末尾出现双斜杠的原因及修复方案
哈哈,这个问题我折腾Django的时候也碰到过!别担心,这绝对不是Django的bug,只是咱们在URL配置和链接生成的细节上没对齐而已~
问题原因分析
出现http://127.0.0.1:8000/polls/specifics/1//这种双斜杠的情况,核心是两处的斜杠重复叠加了:
- 你的URL配置里已经给路径加了末尾斜杠:
path('specifics/<int:question_id>/', views.detail, name='detail') - 在模板(或者视图里用
reverse生成URL时)又手动给链接加了额外的斜杠。比如模板里可能写成了这样:
或者视图里用了:<a href="{% url 'detail' question.id %}/">查看问题详情</a>
两者的斜杠叠加后,就出现了双斜杠的情况。url = reverse('detail', args=(question.id,)) + '/'
修复方法
根据不同场景,你可以选择下面任意一种方案:
方案1:去掉URL配置里的末尾斜杠
把你的path改成不带末尾斜杠的形式,依赖Django默认的APPEND_SLASH配置(默认是True)自动补全斜杠:
path('specifics/<int:question_id>', views.detail, name='detail')
这样即使模板里不小心加了斜杠,Django也会自动处理成单个斜杠。
方案2:去掉模板/视图里手动添加的斜杠
保持URL配置不变,只需要修改模板里的链接写法,删掉手动加的斜杠:
<a href="{% url 'detail' question.id %}">查看问题详情</a>
如果是视图里用reverse生成URL,也去掉后面拼接的斜杠:
url = reverse('detail', args=(question.id,))
方案3:检查根URL配置(可选)
如果项目根URLconf里的polls路径是path('polls/', include('polls.urls'))(末尾带斜杠),同时你在模板里用了绝对路径写法(比如/polls/{% url 'detail' question.id %}/),也会导致重复,这种情况只需要去掉模板里路径末尾的斜杠即可。
内容的提问来源于stack exchange,提问作者Yunlu
相关产品推荐
相关产品推荐

