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

如何使用Django框架在导航栏中展示数据库存储的分类列表

问题相关截图

解决方案

你把导航栏放在base.html全站引入的场景下,自定义上下文处理器是最优实现方案,不需要在每个业务视图重复查询、传递分类数据,一次配置后全站所有模板都能直接访问分类列表。

步骤1:编写上下文处理器

在存放分类模型的app(示例中为post应用)下新建context_processors.py文件,写入以下代码:

from .models import Category # 替换成你自己的分类模型实际导入路径

def global_categories(request):
    # 可根据业务需求加筛选条件,比如只展示启用状态的分类:Category.objects.filter(is_active=True)
    return {"categories": Category.objects.all()}

步骤2:注册处理器到Django配置

打开项目的settings.py文件,找到TEMPLATES配置段,在OPTIONS下的context_processors列表末尾追加你刚写的处理器路径:

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                # 追加下面这行,替换成你实际的app名和函数名
                "post.context_processors.global_categories",
            ],
        },
    },
]

步骤3:修改导航栏模板渲染动态分类

打开includes/navbar.html,把分类下拉菜单里写死的测试菜单项替换成模板循环,直接读取注入的categories变量即可:

<ul aria-labelledby="navbarDropdown" class="dropdown-menu">
    {% for category in categories %}
    <li><a class="dropdown-item" href="#">{{ category.name }}</a></li>
    {% empty %}
    <li><span class="dropdown-item text-muted">暂无可用分类</span></li>
    {% endfor %}
</ul>

其他可选方案(仅适合非全站场景)

如果导航栏只在少数个别页面使用,不需要全站加载,你也可以在include引入局部模板时直接传参:

{% include "includes/navbar.html" with categories=category_list %}

但你当前是把导航放在base.html全站复用,这种方案需要每个视图都单独查询分类数据再传给模板,会产生大量重复代码,不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:09:18