如何通过超链接向Django URL路径传字符串?链接失效排查
问题解决方案
问题根源
你的代码存在两处关键错误:
- URL配置中的
name属性使用了错误格式,包含路径参数语法<str:mapName>,不符合Django对路由别名的要求。 - HTML模板中的
{% url %}标签调用方式错误,未通过正确路由别名传递参数,而是硬编码了路径片段。
修正步骤
1. 修正URL配置
将路由的name改为纯标识符(比如map_strategies),移除参数语法:
app_name = "overwatch" path('maps/<str:mapName>', views.mapStrategies, name='map_strategies'),
2. 修正HTML模板的超链接
使用正确的路由别名,并传递mapName参数给{% url %}标签:
<div id="item"> <a href="{% url 'overwatch:map_strategies' mapName='blizzard' %}"> <img src="{% static 'pics/blizzard-world.jpg' %}" alt="Blizzard World" /> </a> </div>
原理说明
- Django的路由
name是标识路由的别名,必须是不含参数语法的纯字符串,不能包含<str:mapName>这类路径参数定义。 - 模板中的
{% url %}标签需要通过路由别名生成URL,同时必须传入路由定义要求的参数(此处为mapName),Django会自动根据路由规则拼接出正确的URL路径。之前的写法让Django无法匹配到对应路由别名,导致点击链接时URL不被识别,但手动输入路径符合路由的path规则,所以能正常访问。
内容的提问来源于stack exchange,提问作者Richard Holloway
相关产品推荐
相关产品推荐

