Django类视图中如何同时获取两个模型数据并渲染到同一HTML页面
你的猜测完全正确,问题核心就是类视图中重复定义的get方法会互相覆盖,仅最后一个生效,因此只能拿到单个模型的数据。
修正方案
把两个模型的查询逻辑合并到同一个get方法内,同时将两个查询结果都传入模板上下文即可:
class home(View): def get(self, request): category_list = Categories.objects.all() subcategory_list = Subcategories.objects.all() # 上下文同时传递两个数据集 return render(request, 'home.html', { 'category_list': category_list, 'subcategory_list': subcategory_list })
模板调用示例
修改后你可以在home.html中直接调用两个变量,如果你给两个模型做了外键关联,还可以实现分类嵌套遍历:
{% for category in category_list %} <div class="category-item"> <h3>{{ category.分类名字段 }}</h3> <ul> {% for sub in subcategory_list %} {% if sub.关联分类外键_id == category.id %} <li>{{ sub.子分类名字段 }}</li> {% endif %} {% endfor %} </ul> </div> {% endfor %}
如果Subcategories模型设置了外键关联到Categories,你甚至可以省去单独查询子分类的步骤,直接通过ORM反向查询获取每个分类对应的子分类,逻辑更简洁:
# 视图仅查询分类即可 def get(self, request): category_list = Categories.objects.all() return render(request, 'home.html', {'category_list': category_list})
模板中直接反向调用:
{% for category in category_list %} <h3>{{ category.name }}</h3> <ul> {% for sub in category.subcategories_set.all %} <li>{{ sub.name }}</li> {% endfor %} </ul> {% endfor %}
内容的提问来源于stack exchange,提问作者Shreyash mishra
相关产品推荐
相关产品推荐

