Django视图render方法如何向模板传递多个变量
问题根因
Django的render()方法只接收一个字典类型的上下文参数用于向模板传递数据,你在代码中给render()传入了两个独立字典,第二个字典不会被解析为模板可用的上下文变量,自然无法在模板中拿到product_data。
另外你第一段可运行的代码里存在变量名笔误:定义的集合对象是collection_data_1,查询时写的是collection_data.find(),这段能跑大概率是你之前定义过同名全局变量,建议修正避免隐式bug。
修复方案
把所有需要传递给模板的变量,统一放到同一个上下文字典中传入render()即可,修正后的完整代码:
db = client.inventory_data def home(request): collection_orders = db['orders'] collection_product = db['product'] mydata = list(collection_orders.find()) product_data = list(collection_product.find()) # 所有模板变量合并到同一个context字典传递 return render(request, 'home.html', { 'mydata': mydata, 'product_data': product_data })
模板调用方式
修改完成后,你在home.html中就可以直接通过变量名访问两个列表数据,例如遍历商品列表可以这么写:
<ul> {% for product in product_data %} <li>{{ product.name }}</li> {% endfor %} </ul>
订单数据mydata的调用方式和之前完全一致,不受影响。
内容的提问来源于stack exchange,提问作者def init
相关产品推荐
相关产品推荐

