Django URL跳转异常:categories.html中Href指向错误路径
解决Django中URL跳转错误的问题
这是相对路径导致的典型URL跳转问题,在Django开发里很常见,我来帮你快速搞定!
最推荐的解决方案:使用Django的url模板标签
Django自带的模板标签能完美解决路径适配问题,完全避免硬编码路径的坑。你只需要修改categories.html里的代码,把固定的href替换成{% url %}标签:
<p class="card-text"> <a href="{% url 'newspaperapp:detail' news.id %}" class="btn btn-sm btn-primary">{{news.title}}</a> </p>
这里的newspaperapp:detail对应你urls.py里设置的app_name和name='detail',news.id就是要传递的文章ID参数。不管当前页面在哪个路径下,这个标签都会自动生成正确的绝对URL,再也不会跳错位置。
备选方案:使用根路径开头的绝对路径
如果暂时不想用模板标签,也可以把href改成以/开头的绝对路径,强制从网站根目录解析:
<p class="card-text"> <a href="/newspaperapp/results/detail/{{news.id}}" class="btn btn-sm btn-primary">{{news.title}}</a> </p>
不过这种方法不够灵活,要是以后修改了app前缀或者URL结构,你得手动修改所有硬编码的路径,所以还是优先推荐第一种模板标签的方案。
为什么会出现这个问题?
核心原因是相对路径的解析规则:
- 在
search.html页面,当前URL是http://127.0.0.1:8000/newspaperapp/results/,相对路径results/detail/会被解析为http://127.0.0.1:8000/newspaperapp/results/detail/,刚好符合预期。 - 但在
categories.html页面,当前URL是http://127.0.0.1:8000/newspaperapp/category/xxx/,相对路径results/detail/会被解析为http://127.0.0.1:8000/newspaperapp/category/results/detail/,自然就跳转到错误页面了。
内容的提问来源于stack exchange,提问作者user13910430
相关产品推荐
相关产品推荐

