2009-08-20 4 views
5

http://www.djangobook.com/en/beta/chapter10/comportement django changement de modèle à silent_variable_failure = False

« Notez que django.core.exceptions.ObjectDoesNotExist, qui est la classe de base pour toutes les API de base de données de Django exceptions DoesNotExist, a silent_variable_failure = True. Donc, si vous êtes en utilisant des modèles Django avec des objets modèles Django, toute exception DoesNotExist échouera silencieusement. "

En cours de développement, j'aimerais inverser ce comportement, c'est-à-dire silent_variable_failure = False. Comment puis-je rendre ce changement permanent tout en développant sous django?

Merci, Nick

Répondre

4

Dans settings.py I ajouté TEMPLATE_STRING_IF_INVALID = "chaîne non valide '% s'" Voir http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables pour plus d'informations.

"Beaucoup de modèles, y compris ceux du site Admin, s'appuient sur le silence du système de gabarit lorsqu'une variable inexistante est rencontrée. connaîtront des problèmes de rendu avec ces modèles et ces sites. "

+0

Dans le django 1.8 le 'TEMPLATE_STRING_IF_INVALID' [a changé] (http://stackoverflow.com/a/33750585/1888983). Voir [les docs] (https://docs.djangoproject.com/fr/1.8/ref/templates/upgrading/#the-templates-settings). – jozxyqk

0

Le système de template Django recherche silent_variable_failure comme un attribut d'une exception. Cela signifie que vous avez défini votre propre exception avec cet attribut défini sur False. Pour l'exception ObjectDoesNotExist standard générée par l'ORM, etc., la solution la plus simple serait de modifier le code source Django sur votre boîte de développement (django/core/exceptions.py). Si c'était quelque chose que vous deviez changer sur un système de production, vous devez 1) définir votre propre classe d'exception, 2) mettre un gestionnaire sur votre modèle qui est appelé depuis le modèle (au lieu d'utiliser directement les méthodes ORM), puis 3) capturez DoesNotExist dans votre gestionnaire et relancez l'exception avec votre propre classe.

+0

Merci pour la bonne info. J'ai édité /usr/share/python-support/python-django/django/core/exceptions.py et changé en silent_variable_failure = False mais je n'ai pas pu changer le comportement. Je ne sais pas si j'ai besoin de régénérer le fichier .pyc. J'ai supprimé /var/lib/python-support/python2.6/django/core/exceptions.pyc en désespoir de cause mais en vain. Je pense que TEMPLATE_STRING_IF_INVALID fera ce que je veux, peut-être le comportement est différent dans la version ultérieure de django. Je cours Django version 1.0.2 final –

0

Un autre paramètre, TEMPLATE_DEBUG, peut être défini sur True dans settings.py pour modifier ce comportement.

Questions connexes