django - 在 Django 1.6 中的模板中全局访问对象

标签 django django-templates django-views

我想在 Django 1.6 中的所有页面上都有一个菜单。

在菜单中,我还想包含数据库中的一些对象。我知道我可以扩展 ListView 并获取对象,并且我知道我可以在 get_context_data 中设置变量,但是如何使这些对象在我的所有页面上可用。我认为在每个 View 中设置 context_data 是愚蠢的。

我的菜单结果应该是这样的:

Home
Users
    User 1
    User 2
    User 3
Help
Questions
    Question 1
    Question 2
    Question 3
About

什么是好的方法呢?中间件?模板标签?

最佳答案

您正在寻找定制template context processor :

你应该编写一个像这样的函数:

#file: my_context_processors.py

def menu_data(request):

    return {
            'menu': calculate_menu( request ),  #<-- menu is appended 
                                                #    to your context
                                                #    for all templates
             }

其中 calculate_menu 返回一个包含菜单项和子项(字典?)的对象,请记住,您将 pathuser 和其他信息放入 请求

然后将您的自定义处理器包含在应用设置模板上下文处理器中:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    #"django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.contrib.messages.context_processors.messages",
    "django.core.context_processors.csrf",
    'django.core.context_processors.request',
    'my_app.my_context_processors.menu_data',   #<---- here
    )

此时,menu 对象在您的所有模板上都可用。

不要对术语感到 panic ,这并不难,这就是正确的方法。

关于django - 在 Django 1.6 中的模板中全局访问对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198254/

相关文章:

html - 我使用 django 创建了一个博客,想知道我们是否需要将文章存储为 html 格式?

python - pyjade radio 输入文本未显示

django - 我如何从 Django 查询中提取字段名和值

python - Django 和 psycopg2 : FATAL: password authentication failed for user

在 PostgreSQL 上使用 LIKE 的 Django 原始 SQL 查询

django - 为什么模板文件中的 {{ form }} 代表表单实例?

python - 获取循环中的下一个项目

django - 为什么我的文件不会保存到实例(它保存到磁盘......)?

django - 使用 'inspectdb' 得到错误 'IndexError: list index out of range'(可能是因为没有一些 FK)。请建议解决方法

python - 在通过参数传递到函数的 bigquery SQL 查询中使用用户 ID