J'ai trouvé que tenter d'accéder à une variable non définie dans un template Mako provoque une NameError
, et c'est assez logique. Dans certaines applications, cependant, il est souhaitable d'échouer de manière plus gracieuse, en substituant peut-être la chaîne vide en cas d'erreur (AttributeError
est une autre option). C'est le comportement par défaut dans le langage de template Django. Existe-t-il un moyen d'obtenir ce comportement en Mako?
Réponse
Trop de publicités?Eh bien, il s'avère qu'un peu plus de recherche sur Google le montre clairement :
import mako.runtime
mako.runtime.UNDEFINED = ''
Maintenant, les variables non définies produiront la chaîne vide.
Lecture de la source de la valeur d'origine de UNDEFINED est éclairante :
class Undefined(object):
"""Représente une valeur indéfinie dans un modèle.
Tous les modules de modèle ont une valeur constante
``UNDEFINED`` présente qui est une instance de cet
objet.
"""
def __str__(self):
raise NameError("Indéfini")
def __nonzero__(self):
return False
Et voilà. Merci, Google.