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

Django视图向HTML模板传递多变量仅一个生效,如何解决?

问题解决:Django视图同时传递多个上下文数据

1. 修复视图函数

你的核心问题是Django的render函数只接受单个上下文字典,传两个字典会导致第二个字典被错误识别成其他参数,模板无法获取file2的数据。同时优化文件读取方式,避免资源泄漏:

def device_list(request):
    # 使用with语句自动管理文件资源,无需手动关闭
    with open('Switches.txt', 'r') as f1:
        # splitlines()将文本按行分割为列表,方便模板逐行遍历
        file1 = f1.read().splitlines()
    with open('Routers.txt', 'r') as f2:
        file2 = f2.read().splitlines()
    
    # 将所有数据存入同一个上下文字典
    context = {
        'file1': file1,
        'file2': file2
    }
    
    return render(request, "device_list.html", context)

2. 修复模板问题

模板末尾多了多余的}},需要删除;配合视图的splitlines()处理,模板可以正常逐行渲染内容:

{% extends 'base.html' %}

{% block first_file %}
{% for result in file1 %}
    <div class="row">
        {{ result }}
    </div>
{% endfor %}
{% endblock %}

{% block second_file %}
{% for result in file2 %}
    <div class="row">
        {{ result }}
    </div>
{% endfor %}
{% endblock %}

关键原因说明

  • render函数的第三个参数是唯一的上下文字典,传入多个字典会导致后续字典被误当作content_type等其他参数,无法传递到模板。
  • read()方法返回整个文件的字符串,直接遍历会逐个字符输出,splitlines()将其转为按行划分的列表,符合逐行展示的需求。
  • with语句是Python读取文件的最佳实践,会自动关闭文件句柄,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20