2011-09-28 10 views
25

Estoy buscando una configuración django o una forma programática para hacer que todas las etiquetas de la plantilla django muestren la cadena vacía cuando el valor es Ninguno. Por ejemplo, imagina que tengo algo de plantillas de Django:Configuración de Django para salida de etiqueta de plantilla predeterminada cuando la variable es Ninguna?

{{cat}} chases {{mouse}} 

si ambos ratón y el gato son Ninguno, que se hacen 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 conozco una configuración llamada TEMPLATE_STRING_IF_INVALID. Sin embargo, esta configuración se aplica solo a cadenas inválidas. Ninguno se considera válido.

Respuesta

34

No existe tal cosa. Es por eso que existen los filtros default y default_if_none. Esta es una característica ; te hace pensar sobre lo que estás haciendo en lugar de confiar en un comportamiento que muchas veces sería 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 fuera simplemente procesar una cadena en blanco, no sabría si el valor no está definido o si realmente es una cadena en blanco. Escriba un código coherente y olvídese de los atajos.

+4

+1 porque "Explicit is better than implicit". – jathanism

+0

Eso tiene mucho sentido, ¡gracias! – zzz

+0

Lame. ¿Qué pasó con "¿Es más fácil pedir perdón que permiso"? Me temo que esto no es muy pitónico y no sigue en absoluto a DRY - ¡escribiendo 'default_if_none' en todas partes !. Para eludir esta "característica", 'forms.fields.CharField' nunca regresa None, porque es mejor almacenar cadenas vacías DB ... sí, claro: P-lo siento por las fanfarronadas, no pude evitarlo. –

4

"Explícito es mejor que implícito"

pienso en lo enfurecido que sería cuando las cosas no se muestre correctamente porque se le olvidó que había permitido a la magia "hacer todo con un valor falso como una cadena nula" ajuste.

Si encuentra que está utilizando el filtro default_if_none mucho, es posible que desee considerar cambiar la pieza fundida None a '' ANTES de pasarla a la plantilla.

Su plantilla será más simple, y tendrá explícitamente tomó esta decisión de codificar valores nulos.

3

Esto debería ser el truco, colóquelo 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 
Cuestiones relacionadas