2009-08-20 11 views
5

http://www.djangobook.com/en/beta/chapter10/Django zachowanie zmiana szablonu silent_variable_failure = False

„Zauważ, że django.core.exceptions.ObjectDoesNotExist, który jest klasą bazową dla wszystkich Django bazie API wyjątkami DoesNotExist ma silent_variable_failure = true. Więc jeśli jesteś przy użyciu szablonów Django z obiektami modelu Django, każdy wyjątek DoesNotExist nie powiedzie się po cichu. "

Podczas gdy ja rozwijam, chciałbym odwrócić to zachowanie, tzn. Silent_variable_failure = False. Jak zmienić tę zmianę na trwałą podczas rozwijania w django?

Dzięki Nick

Odpowiedz

4

W settings.py dodałem TEMPLATE_STRING_IF_INVALID = "invalid string '% s'" Zobacz http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables aby uzyskać więcej informacji.

Obejmuje to ostrzeżenie "Zawiera wiele szablonów, w tym te w witrynie administracyjnej, polegające na ciszy systemu szablonów w przypadku napotkania nieistniejącej zmiennej. Jeśli przypiszesz wartość inną niż" "do TEMPLATE_STRING_IF_INVALID, ty wystąpią problemy z renderowaniem tych szablonów i witryn. "

+0

W django 1.8 zmieniono 'TEMPLATE_STRING_IF_INVALID' (http://stackoverflow.com/a/33750585/1888983). Zobacz [dokumenty] (https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/#the-templates-settings). – jozxyqk

0

System szablonów Django szuka silent_variable_failure jako atrybut żadnego wyjątku.

Oznacza to, że zdefiniowałeś własny wyjątek z tym zestawem atrybutów: False.

Dla standardowego wyjątku ObjectDoesNotExist wygenerowanego przez ORM, itp., Najprostszym rozwiązaniem byłoby zmodyfikowanie kodu źródłowego Django w twoim pudełku programistycznym (django/core/exceptions.py).

Jeśli było to coś, co trzeba było zmienić w systemie produkcyjnym, to musielibyśmy 1) zdefiniować własną klasę wyjątków, 2) umieścić menedżera w modelu, który jest wywoływany z szablonu (zamiast bezpośrednio korzystać z metod ORM), a następnie 3) złapać DoesNotExist w menedżerze i ponownie podnieść wyjątek z własnej klasy.

+0

Dzięki za dobre informacje. Edytowałem /usr/share/python-support/python-django/django/core/exceptions.py i zmieniłem na silent_variable_failure = Fałsz, ale nie mogłem zmienić zachowania. Nie jestem pewien, czy muszę zregenerować plik .pyc. W desperacji usunąłem /var/lib/python-support/python2.6/django/core/exceptions.pyc, ale bez skutku. Myślę, że TEMPLATE_STRING_IF_INVALID zrobi to, co chcę, może zachowanie będzie inne w późniejszej wersji django. Używam wersji Django 1.0.2 final –

0

Kolejne ustawienie, TEMPLATE_DEBUG, można ustawić na wartość True w pliku settings.py, aby zmienić to zachowanie.