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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:39:03