python - plantillas - linebreaksbr django
¿Configuración de Django para la salida de etiqueta de plantilla predeterminada cuando la variable es Ninguna? (3)
Estoy buscando una configuración django o una forma programática de hacer que todas las etiquetas de plantilla django muestren la cadena vacía cuando el valor es Ninguno Por ejemplo, imagina que tengo alguna plantilla django:
{{cat}} chases {{mouse}}
si tanto el gato como el ratón son Ninguno, se procesará como:
None chases None
Soy consciente de que puedo configurar cada uno usando {{cat|default:""}}
o {{mouse|default_if_none:""}}
Sin embargo, estoy buscando algún tipo de configuración que me permita establecer el valor predeterminado para todas las etiquetas, sin agregar explícitamente |default:""
a cada etiqueta.
También soy consciente de una configuración llamada TEMPLATE_STRING_IF_INVALID
. Sin embargo, esta configuración solo se aplica a cadenas no válidas. Ninguno se considera válido.
"Explícito es mejor que implícito"
Piense en cuán enfurecido estaría cuando las cosas no se procesaran correctamente porque olvidó que había habilitado la configuración mágica de "renderizar todo con un valor falso como una cadena nula".
Si descubre que está utilizando mucho el filtro default_if_none
, es posible que desee considerar cambiar la conversión de None
a ''''
ANTES de que se pase a la plantilla.
Su plantilla será más simple, y habrá tomado explícitamente esta decisión de establecer valores nulos.
Esto debería hacer el truco, ponerlo en algún lugar del código de inicialización, por ejemplo. en wsgi.py
# Patch template Variable to output empty string for None values
from django.template.base import Variable
_resolve_lookup = Variable._resolve_lookup
def new_resolve_lookup(self, *args, **kwargs):
o = _resolve_lookup(self, *args, **kwargs)
return o or u""
Variable._resolve_lookup = new_resolve_lookup
No existe tal cosa. Es por eso que existen los filtros por default
y por default_if_none
. Esta es una característica ; te hace pensar en lo que estás haciendo en lugar de confiar en algún comportamiento que muchas veces podría ser engañoso. Si existe la posibilidad de que una variable sea None
, entonces debe planificar esa contingencia. Si la variable siempre debe tener algún valor, entonces "Ninguno" indica que algo no está bien. Si el valor predeterminado era simplemente mostrar una cadena en blanco, entonces no sabría si el valor no está definido o si en realidad es una cadena en blanco. Escribe código coherente y olvídate de los atajos.