You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中URL重复引发模板未找到错误的问题解决诉求

问题解决:Django分类下拉菜单URL重复问题

问题原因

当前模板里的链接使用了相对路径:href="viewalls/{{j.id}}"。首次点击后进入viewalls/1页面,第二次点击时浏览器会以当前页面路径为基础,拼接出viewalls/1/viewalls/2这类重复URL,最终触发模板未找到错误。

解决方案

方案1:改用绝对路径

在链接前添加斜杠,让路径从网站根目录开始解析:

<div class="dropdown">
    <a class="btn btn-secondary dropdown-toggle"  role="button" data-bs-toggle="dropdown" aria-expanded="false">
        category
    </a>
    <ul class="dropdown-menu">
        {% for j in catism %}
            <li><a class="dropdown-item" href="/viewalls/{{j.id}}">{{j.cat_name}}</a></li>
        {% endfor %}
    </ul>
</div>

方案2:使用Django反向解析URL(推荐)

借助Django的url模板标签,通过URL名称反向生成正确路径,后续修改urls.py规则时无需手动调整模板链接:

<div class="dropdown">
    <a class="btn btn-secondary dropdown-toggle"  role="button" data-bs-toggle="dropdown" aria-expanded="false">
        category
    </a>
    <ul class="dropdown-menu">
        {% for j in catism %}
            <li><a class="dropdown-item" href="{% url 'views' j.id %}">{{j.cat_name}}</a></li>
        {% endfor %}
    </ul>
</div>

这里'views'对应你在urls.py中为path('viewalls/<int:id>',views.view_all,name='views')定义的URL名称,反向解析会自动生成正确的绝对路径。

额外优化建议

views.py中存在逻辑小问题:pros=pros.filter(cat_id__cat_name=cat)里,cat是category对象,而cat_id__cat_name需要匹配字符串,可修改为更高效的ID过滤方式:

def view_all(request,id=0):
    pros=product.objects.all()
    cats=category.objects.all()
    if id:
        pros=pros.filter(cat_id=id)
        return render(request,'prohome.html',{'context':pros,'catism':cats})
    return render(request,'prohome.html',{'context':pros,'catism':cats})

内容的提问来源于stack exchange,提问作者Ajmal Thaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:35:22