Django详情模板无法显示Vendor表数据,请求排查问题
问题分析与修复方案
你的代码存在几个关键问题,导致详情页无法正常显示供应商数据:
1. QuerySet 与单个实例混淆
在 views.py 中,filter() 方法返回的是QuerySet(查询集合),即便只有一条匹配数据,它也是列表式对象而非单个 Vendor 实例。直接在模板中访问 searchresult.email1 无效,因为 QuerySet 本身不具备这些属性。
修复:
将 filter() 替换为 first()(获取集合中第一个匹配对象,更安全)或 get()(需确保供应商名称唯一,否则会抛出异常):
# views.py def utilvendorview(request, vendor): # 获取第一个匹配的供应商实例 searchresult = Vendor.objects.filter(search=vendor).first() print(vendor) print(searchresult) return render(request,'utilityrentals/vendors_detail.html',{"searchresult":searchresult})
2. 模板变量引用错误
在 vendors_detail.html 中:
{{ Vendor.company }}中的Vendor未传入模板上下文,应使用你传递的searchresult变量- 修正后
searchresult是单个 Vendor 实例,可直接访问其属性
修复:
修改模板中的变量引用:
<!-- vendors_detail.html --> {% extends "maintenance_base.html" %} {% load static from static %} {% block body %} <div class="album py-5 bg-light"> <div class="container"> <div class="row"> <div class="col-md-4"> <div class="card mb-4 box-shadow"> <div class="card-body"> <h5 class="card-title">{{ searchresult.company }}</h5> <h6 class="card-subtitle mb-2 text-muted">Email Address: {{ searchresult.email1 }} </h6> <h6 class="card-subtitle mb-2 text-muted">Email Address: {{ searchresult.email2 }} </h6> <h6 class="card-subtitle mb-2 text-muted">Phone: {{ searchresult.phone1 }} </h6> <h6 class="card-subtitle mb-2 text-muted">Mobile: {{ searchresult.phone2 }} </h6> <h6 class="card-subtitle mb-2 text-muted">Category: {{ searchresult.category }} </h6> <h6 class="card-subtitle mb-2 text-muted">Address1: {{ searchresult.address1 }} </h6> <h6 class="card-subtitle mb-2 text-muted">Address2: {{ searchresult.address2 }} </h6> <h6 class="card-subtitle mb-2 text-muted">City: {{ searchresult.city }} </h6> <h6 class="card-subtitle mb-2 text-muted">Province: {{ searchresult.province }} </h6> <h6 class="card-subtitle mb-2 text-muted">Postal Code: {{ searchresult.postal }} </h6> <h6 class="card-subtitle mb-2 text-muted">Notes: {{ searchresult.notes }} </h6> <h6 class="card-subtitle mb-2 text-muted">Active: {{ searchresult.active }} </h6> </div> </div> </div> </div> </div> </div> {% endblock body %}
3. URL 传递供应商名称的潜在问题
当前通过 URL 传递供应商名称,若名称包含空格或特殊字符会导致 URL 无效。更可靠的做法是使用供应商 ID:
优化建议:
- 修改
urls.py:
# urls.py path('utilvendorview/<int:vendor_id>/', views.utilvendorview, name='utilityvendor'),
- 更新
views.py:
def utilvendorview(request, vendor_id): searchresult = Vendor.objects.get(id=vendor_id) return render(request,'utilityrentals/vendors_detail.html',{"searchresult":searchresult})
- 修改主模板链接:
<!-- index.html --> <td><a href="{% url 'utilityvendor' results.Vendor.id %}">{{ results.Vendor }}</a></td>
内容的提问来源于stack exchange,提问作者Douglas McCauley
相关产品推荐
相关产品推荐

