我希望在我的Django模板中执行类似非工作代码的操作:
{% if os.environ.DJANGO_SETTINGS_MODULE == "settings.staging" %}
这样的事情可能吗?我的解决方法是创建一个上下文处理器,使变量可用于所有模板,但想知道是否有更直接的方法来实现相同的结果。
答案 0 :(得分:5)
使用context_processor
,执行以下操作,您就可以在模板中访问os.environ.DJANGO_SETTINGS_MODULE
SETTING_TYPE
。您可以使用{% 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',
...
]
}
}
]
答案 1 :(得分:0)
扩展@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 reference 和一个 stackoverflow reference,用于在 django 中创建自定义模板标签和过滤器。