TEMPLATE_STRING_IF_INVALID
не работает для меня. Быстрое решение - открыть env/lib64/python2.7/site-packages/django/template/base.py
, найти except Exception
и выбросить в него print e
(при условии, что вы используете manage.py runserver
и можете видеть вывод на печать).
Однако несколько строк вниз - current = context.template.engine.string_if_invalid
. Я заметил, что string_if_invalid
был пуст, несмотря на то, что он установил TEMPLATE_STRING_IF_INVALID
.Это привело меня к этой части документации:
https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/#the-templates-settings
система шаблонов в Django была перестроена в Django 1.8, когда она получила поддержку нескольких шаблонных движков.
...
Если модуль настройки определяет ALLOWED_INCLUDE_ROOTS
или TEMPLATE_STRING_IF_INVALID
, включают их значения под «allowed_include_roots
» и «string_if_invalid
» ключи в «OPTIONS
» словаря.
Таким образом, в дополнение к @slacy's TemplateSyntaxError трюка,
class InvalidString(str):
def __mod__(self, other):
from django.template.base import TemplateSyntaxError
raise TemplateSyntaxError(
"Undefined variable or unknown value for: %s" % other)
TEMPLATE_STRING_IF_INVALID = InvalidString("%s")
также необходимо определить string_if_invalid
следующим
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'string_if_invalid': TEMPLATE_STRING_IF_INVALID,
...
Сразу это нашел кучупроблемы, о которых я даже не знал. Это действительно должно быть включено по умолчанию. Для решения тегов и фильтров, которые ожидают потерпеть неудачу тихо я бросил условные вокруг них:
{% if obj.might_not_exist %}
{{ obj.might_not_exist }}
{% endif %}
Хотя я подозреваю, что это работает только потому, что {% if %}
не удается молча. Другой подход может заключаться в создании фильтра hasattr
: {% if obj|hasattr:"might_not_exist" %}
.
У меня такая же проблема ... Я бы подумал, что это ошибка в самом джанго ... – 2012-01-13 13:07:54