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
相关产品推荐
相关产品推荐

