Django中如何正确配置URL匹配rfq_id跳转至Ebuy模型详情页
问题排查与修正方案
你现有代码存在3处核心错误,按优先级修正如下:
1. 模板跳转链接语法错误
你当前的url标签把路由名和参数都包裹在同一个引号内,属于语法错误,同时缺失a标签闭合标记,修正为:
<td data-label="RFQ Id"><a href="{% url 'ebuy_detail' i.rfq_id %}">{{ i.rfq_id }}</a></td>
注意:ebuy_detail作为路由名单独用引号包裹,参数i.rfq_id放在引号外部。
2. urls.py路由配置优化
Django默认推荐路由尾部加斜杠,同时给参数指定类型避免不必要的匹配错误,修正为:
path('ebuy/<str:rfq>/', ebuy_detail, name='ebuy_detail'),
3. 视图函数逻辑优化
你当前用icontains模糊查询可能会匹配到多条非目标数据,既然两个模型的rfq值是完全匹配的,建议改用精确匹配;如果确定单个rfq对应唯一的详情数据,建议用get_object_or_404直接返回单个对象,避免模板处理查询集的逻辑冗余:
from django.shortcuts import get_object_or_404 def ebuy_detail(request, rfq): # 单个对象场景用这个 unique_bid = get_object_or_404(Ebuy_Detail_Fields, rfq_id_final=rfq) # 如果确实存在一个rfq对应多条详情的场景,保留精确过滤即可: # unique_bid = Ebuy_Detail_Fields.objects.filter(rfq_id_final=rfq) context = {'unique_bid': unique_bid} return render(request, 'rfq-display.html', context)
模板渲染注意事项
如果使用get_object_or_404返回单个对象,模板中直接用{{ unique_bid.rfq_id_title_final }}等属性即可;如果保留过滤返回查询集,需要在模板中循环遍历{% for item in unique_bid %}输出对应属性。
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

