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
相关产品推荐
相关产品推荐

