Estoy buscando hacer algo como este código que no funciona en mi plantilla de Django:
{% if os.environ.DJANGO_SETTINGS_MODULE == "settings.staging" %}¿Es posible algo así? Mi solución es crear un procesador de contexto para que la variable esté disponible en todas las plantillas, pero quería saber si hay una forma más directa de lograr el mismo resultado.
Use context_processor , haga lo siguiente y debería poder acceder a os.environ['DJANGO_SETTINGS_MODULE'] como SETTING_TYPE en las plantillas. Ejemplo, puede usar {% if SETTING_TYPE == "settings.staging" %}
proyecto/procesadores_de_contexto.py
import os def export_vars(request): data = {} data['SETTING_TYPE'] = os.environ['DJANGO_SETTINGS_MODULE'] return dataproject/settings.py (su archivo de configuración real)
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ ... 'project.context_processors.export_vars', ... ] } } ]Ampliando el comentario de @vinay kumar , puede crear un filtro de plantilla personalizado de la siguiente manera:
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)Y luego en su plantilla puede acceder a ella de esta manera:
plantilla.html
{% if 'DJANGO_SETTINGS_MODULE'|env == 'app_name.staging_settings' %}Finalmente, dejo una referencia de documentos de django y una referencia de stackoverflow para crear etiquetas y filtros de plantilla personalizados en django.