Le moteur de template de django est tolérant, donc appeler des fonctions ou des variables qui n'existent pas sur un objet ne fera aucune exception. Dans ce cas, au lieu d'une exception, un caractère vide est affecté pour le rendre.
C'est beaucoup de comportement qui est apprécié dans un environnement de production, mais c'est aussi agréable d'avoir une erreur dans un environnement de développement. De plus, même dans un environnement de production, il devrait être possible de se connecter même si cela ne provoque pas d'erreur.
Jusqu'à django1.8, cela fonctionnait avec la méthode suivante, mais après cela, la méthode de réglage a changé. stackoverflow.com:show-undefined-variable-errors-in-django-templates
Vous pouvez maintenant définir la valeur sur TEMPLATES.OPTIONS.string_if_invalid
dans settings.py.
docs.djangoproject.com:How invalid variables are handled
Ici, spécifiez "Quoi afficher lors de l'accès à une variable modèle inexistante". Fondamentalement, il est prévu de définir une chaîne de caractères, et si vous entrez % s
, vous pouvez voir le" nom de variable accédé (inexistant) ".
Si vous définissez ici les paramètres suivants, vous pourrez définir le comportement de "lors de l'accès à une variable modèle inexistante".
settings.py
class InvalidString(str):
# "%s is ok" % undefined :Pour les opérations de format de chaîne__mod__Est appelé
def __mod__(self, other):
msg = "Undefined variable or unknown value for: %s" % other
if TEST or IS_LOCAL:
#Exception pour l'environnement de développement
from django.template.base import TemplateSyntaxError
raise TemplateSyntaxError(msg)
else:
#Sortie de journal si cela ressemble à la production
import logging
logger = logging.getLogger('strange')
logger.info(msg)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
],
'string_if_invalid': InvalidString("%s"), #Définir ici
},
},
]
__mod__
est généralement de type int et est l'endroit où vous écrivez le comportement lorsque le reste est demandé.
Si vous définissez quelque chose comme une chaîne de caractères, elle sera appelée lors d'une opération de formatage de chaîne de caractères.
Dans ce cas, le nom de la variable qui a été accédé mais qui n'existe pas est entré et appelé.