从Django基础模板中访问模型数据

7 投票
3 回答
5139 浏览
提问于 2025-04-16 05:17

我有一个叫做 Category 的模型,我希望它的对象总是能在我的 base.html 模板中显示在导航菜单里 (这个模板是我所有其他模板的基础)

我想学习一些最佳实践,所以想知道把这些数据提供给模板的正确方法是什么。

3 个回答

0

给使用较新版本Django(比如1.9)的朋友们提个醒:Django定义上下文处理器的方式发生了变化。现在你不需要再往TEMPLATE_CONTEXT_PROCESSORS里添加内容了,只需在Django的上下文处理器列表中添加一行就可以了:

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.context_processors.your_processor', # CHANGE THIS
            ],
        },
    },
]

希望这对你有帮助!

10

使用自定义的上下文处理器:

在 context_processors.py 文件中:

def categories(request):
    return {
        'categories': Categories.objects.all()
    }

然后把它添加到你的 settings.py 文件中:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... django's default context processors
    "your_app.context_processors.categories", 
)
5

你可以为分类创建一个自定义标签,然后把它放在基础模板里。这样的话,你就不需要在每个视图中都发送一个“分类”变量了。

祝你好运!

撰写回答