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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:39:52