从Django基本模板访问模型数据

时间:2010-10-10 14:08:56

标签: python django django-models django-templates

我有一个模型Category,我希望它的对象始终显示在我的base.html模板的导航菜单中(我所有其他模板都扩展了)

我想学习最佳实践,以便了解向模板提供此数据的正确/可接受的方式是什么。

3 个答案:

答案 0 :(得分:4)

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

在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", 

答案 1 :(得分:2)

您可以为类别创建custom tag并将其放在基本模板中。这样你就不必在每个视图上向上下文发送“category”变量..

祝你好运

答案 2 :(得分:0)

对于使用更高版本的Django(即1.9)的任何人来说,只是一个方向:Django定义其上下文处理器的方式已经改变。您可以在Django的上下文处理器列表中添加一行,而不是添加到TEMPLATE_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.context_processors.your_processor', # CHANGE THIS
            ],
        },
    },
]

希望这有帮助!