YPC*_*ble 7 django django-templates
我想在我的Django模板中做这样的非工作代码:
{% if os.environ.DJANGO_SETTINGS_MODULE == "settings.staging" %}
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?我的解决方法是创建一个上下文处理器,使变量可用于所有模板,但想知道是否有更直接的方法来实现相同的结果.
扩展@vinay kumar的评论,您可以通过以下方式创建自定义模板过滤器:
应用程序/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)
Run Code Online (Sandbox Code Playgroud)
然后在您的模板中您可以通过以下方式访问它:
模板.html
{% if 'DJANGO_SETTINGS_MODULE'|env == 'app_name.staging_settings' %}
Run Code Online (Sandbox Code Playgroud)
最后,我留下了django 文档参考和stackoverflow 参考,用于在 django 中创建自定义模板标签和过滤器。
使用context_processor,执行以下操作,您应该能够os.environ.DJANGO_SETTINGS_MODULE像SETTING_TYPE在模板中一样进行访问.您可以使用的示例{% if SETTING_TYPE == "settings.staging" %}
项目/ context_processors.py
import os
def export_vars(request):
data = {}
data['SETTING_TYPE'] = os.environ.DJANGO_SETTINGS_MODULE
return data
Run Code Online (Sandbox Code Playgroud)
project/settings.py(您的实际设置文件)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'project.context_processors.export_vars',
...
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3683 次 |
| 最近记录: |