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

Django QuerySet查询结果正确但模板无法显示数据如何解决?

核心问题排查&修复方案

存在4处可直接导致空模板的问题,修复后即可正常展示数据:

  • 上下文变量名不匹配:视图search_results_primers传递给模板的变量名为query,但模板中迭代使用的变量名为result,变量名不对应导致循环无法执行
  • 跳转逻辑错误:filter_primers视图表单验证通过后直接渲染结果模板,没有触发search_results_primers的查询逻辑,返回的是无数据的空模板
  • 参数获取逻辑冗余:search_results_primers中从GET参数读取搜索词,但搜索词实际已经存储在session中,不需要依赖GET参数传递
  • 模板标签笔误:模板中<tbody>的结束标签误写为</body>,可能导致页面渲染异常

修改后的代码参考

1. filter_primers视图调整

from django.shortcuts import redirect # 顶部导入重定向方法

def filter_primers(request):
    filter_by = request.session.get('filter_by')
    if request.method == "POST":
        form = FilterPrimerForm(request.POST)
        if form.is_valid():
            request.session['contains'] = form.cleaned_data.get("contains")
            # 重定向到搜索结果视图对应的路由,不要直接渲染模板
            return redirect('search_results_primers') # 替换为你路由配置中search_results_primers对应的名称
        else:
            return render(request, 'lab_inventory/choose_filter_primers.html')
    else:
        form = FilterPrimerForm()
        context = {'form': form}
    return render(request, 'lab_inventory/filter_primers.html', context)

2. search_results_primers视图调整

def search_results_primers(request):
    # 直接从session读取参数,不需要从GET参数获取
    search_term = request.session.get('contains')
    filter_by = request.session.get('filter_by')
    result = {'result': []}
    if filter_by == 'primer_name' and search_term:
        query = Primer.objects.filter(primer_name__contains=search_term).values()
        # 上下文变量名和模板保持一致
        result['result'] = query
    return render(request, 'lab_inventory/search_results_primers.html', result)

3. 模板片段调整

<table id="search-results-primers-table">
  <tr>
    <th>Primer Name</th>
    <th>Primer Sequence</th>
    <th>Purchase Order</th>
    <th>Date Received</th>
    <th>Date Opened</th>
    <th>Date Discarded</th>
    <th>Freezer / Shelf</th>
    <th>Box / Position</th>
  </tr>
  <tbody>
    {% for item in result %}
      <tr>
        <td>{{ item.primer_name }}</td>
        <td>{{ item.primer_seq }}</td>
        <td>{{ item.purchase_order }}</td>
        <td>{{ item.date_received }}</td>
        <td>{{ item.date_opened }}</td>
        <td>{{ item.date_discarded }}</td>
        <td>{{ item.stored_freezer }}</td>
        <td>{{ item.stored_box }}</td>
      </tr>      
    {% endfor %}
  </tbody> <!-- 修正之前的</body>错误标签 -->
</table>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:18:03