Django中如何通过HTML href正确链接到views.py定义的视图
问题原因
你直接把HTML文件名写在href属性里用的是相对路径跳转,完全没匹配Django的路由映射逻辑,浏览器会基于当前所在页面的路径拼接相对地址,比如当前已经在/qualifications/路径下,点qualifications.html的链接就会自动拼成/qualifications/qualifications.html,和你预期的路由路径对不上。
解决方法
Django项目里不要硬编码文件路径或者路由地址,你已经在urls.py里给每个路由配置了name参数,直接用模板标签{% url %}反查对应路径就行,后续就算改路由规则,也不用挨个修改模板里的链接。
把导航部分的HTML代码改成下面这样:
<div id="nav_bar"> <ul> <li><a href="{% url 'home' %}">Home</a></li> <li><a href="{% url 'qualifications' %}">Qualifications</a></li> </ul> </div>
如果你暂时不想用模板标签,也可以直接写站点根路径下的绝对地址,也能正常跳转,但不推荐长期用这种硬编码方式:
<div id="nav_bar"> <ul> <li><a href="/">Home</a></li> <li><a href="/qualifications/">Qualifications</a></li> </ul> </div>
注意:写绝对路径的时候开头的
/不能漏,漏了就又变回相对路径,还是会出现之前地址拼接错误的问题。
强烈建议优先使用{% url %}模板标签的写法,后续维护成本极低:如果之后你要把qualifications/的路由改成resume/这类新路径,只需要修改urls.py里的path配置,所有模板里的对应链接会自动同步更新,不用全局找替换硬编码的地址。
内容的提问来源于stack exchange,提问作者logan_9997
相关产品推荐
相关产品推荐

