【问题标题】:How can I access environment variables directly in a Django template?如何在 Django 模板中直接访问环境变量?
【发布时间】:2017-08-29 16:09:39
【问题描述】:

我希望在我的 Django 模板中执行类似这样的非工作代码:

{% if os.environ.DJANGO_SETTINGS_MODULE == "settings.staging" %}

这样的事情可能吗?我的解决方法是创建一个上下文处理器以使变量在所有模板中都可用,但想知道是否有更直接的方法来实现相同的结果。

【问题讨论】:

  • 不,如果不明确添加模板,则无法从模板访问环境
  • 您也可以使用自定义模板标签或过滤器来获取模板中的环境变量。

标签: django django-templates


【解决方案1】:

使用context_processor,按照以下操作,您应该可以在模板中以SETTING_TYPE 访问os.environ['DJANGO_SETTINGS_MODULE']。可以使用{% if SETTING_TYPE == "settings.staging" %}的示例

project/context_processors.py

import os 

def export_vars(request):
    data = {}
    data['SETTING_TYPE'] = os.environ['DJANGO_SETTINGS_MODULE']
    return data

project/settings.py(你的实际设置文件)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                 ...
                  'project.context_processors.export_vars',
                 ...
            ]
         }
      }
   ]

【讨论】:

    【解决方案2】:

    扩展@vinay kumar的评论,您可以通过以下方式创建自定义模板过滤器:

    application/template_tags_folder/template_tags_file.py

    from django.template.defaulttags import register
    import os
    
    @register.filter
    def env(key):
        return os.environ.get(key, None)
    

    然后在您的模板中,您可以通过这种方式访问​​它:

    模板.html

    {% if 'DJANGO_SETTINGS_MODULE'|env == 'app_name.staging_settings' %}
    

    最后我留下django docs referencestackoverflow reference 用于在django 中创建自定义模板标签和过滤器。

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 2016-11-03
      • 2014-04-08
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多