【问题标题】:Django, global template variablesDjango,全局模板变量
【发布时间】:2011-01-14 11:18:16
【问题描述】:

我有一个基本模板文件 (base.html),所有其他模板都扩展到它并使用它的块生成内容。基础模板文件中使用了某些变量,例如 nav_obj。

查看:

nav_obj = NavigationObject.objects.all()

基础模板:

{% for object in nav_obj %}
<a href="{{ object.link }}">{{ object.title }}</a>
{% endfor %}

目前,我需要在每个视图中传递 nav_obj。有什么办法可以自动发送?

【问题讨论】:

  • 你解决了吗?

标签: django django-templates


【解决方案1】:

写你自己的context processor。

【讨论】:

【解决方案2】:

Inclusion tags 可能是上下文处理器的一个不错的替代品。

【讨论】:

    【解决方案3】:

    还有一个替代方案,在此处重定向:Defining "global variable" in Django templates

    片段示例用法:

    {% setglobal foo 0 %}
    value={% getglobal foo %}
    {% incrementglobal foo 0 %}
    value={% setglobal foo %}
    

    【讨论】:

      【解决方案4】:

      正如已接受的答案所说,使用上下文处理器。以下是如何让它们与当前的 Django 版本一起工作:

      首先,创建一个接受请求并返回包含全局模板变量的字典的函数:

      def load_nav_obj(request):
          nav_obj = NavigationObject.objects.all()
          return {'nav_obj': nav_obj}
      

      这个函数的一个好地方是在你的主应用程序的文件context_processors.py中。

      现在,告诉您的应用将此上下文处理器用于所有呈现的模板。在您的settings.py 中,在TEMPLATE 设置中添加myapp.context_processors.load_nav_obj:

      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              'DIRS': [],
              'APP_DIRS': True,
              'OPTIONS': {
                  'context_processors': [
                      # Insert your context processors here
                      'django.contrib.auth.context_processors.auth',
                      'django.template.context_processors.debug',
                      'django.template.context_processors.i18n',
                      'django.template.context_processors.media',
                      'django.template.context_processors.static',
                      'django.template.context_processors.tz',
                      ...
                      'myapp.context_processors.load_nav_obj',
                  ],
              },
          },
      ]
      

      就是这样!您现在可以在所有模板中使用变量{{nav_obj}}!

      【讨论】:

        【解决方案5】:

        您还可以查看 Django-navbar 的文档和测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-06
          • 1970-01-01
          • 1970-01-01
          • 2012-09-30
          相关资源
          最近更新 更多