Сделайте шаблоны Django строгими - PullRequest
9 голосов
/ 24 января 2012

В шаблоне django вызов {{ var }} будет молча завершаться ошибкой, если var не определено. Это затрудняет отладку шаблонов. Есть ли настройка, которую я могу изменить, чтобы django выдавал исключение в этом случае?

Единственный намек на решение, которое я нашел в Интернете, это http://groups.google.com/group/google-appengine/browse_thread/thread/86a5b12ff868038d, и это звучит ужасно хакерски.

Ответы [ 3 ]

6 голосов
/ 24 января 2012

Джанго <= 1,9 </strong>

Установите TEMPLATE_STRING_IF_INVALID = 'DEBUG WARNING: undefined template variable [%s] not found' в вашем settings.py.

См. Документы:
https://docs.djangoproject.com/en/1.9/ref/settings/#template-string-if-invalid

Джанго> = 1,10

Установить string_if_invalid = 'DEBUG WARNING: undefined template variable [%s] not found' вариант шаблона в вашем settings.py.

См. Документы: https://docs.djangoproject.com/en/2.0/topics/templates/#module-django.template.backends.django

Также читайте: http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables

3 голосов
/ 10 августа 2015

Этот хак из djangosnippets вызовет исключение, когда в шаблоне будет обнаружена неопределенная переменная.

# settings.py
class InvalidVarException(object):
    def __mod__(self, missing):
        try:
            missing_str = unicode(missing)
        except:
            missing_str = 'Failed to create string representation'
        raise Exception('Unknown template variable %r %s' % (missing, missing_str))
    def __contains__(self, search):
        if search == '%s':
            return True
        return False

TEMPLATE_DEBUG = True
TEMPLATE_STRING_IF_INVALID = InvalidVarException()
0 голосов
/ 24 января 2012

Это часть дизайна.Это позволяет вам задавать значения по умолчанию и переключаться в зависимости от того, существует ли переменная в контексте.Это также позволяет шаблонам быть очень гибкими и обеспечивает возможность повторного использования шаблонов вместо строгого подхода «каждое представление должно иметь свой собственный шаблон».

Более того, шаблоны на самом деле не должны быть отлажены».Идея состоит в том, чтобы разместить как можно больше вашей логики вне шаблона, в видах или моделях.Если вы хотите выяснить, почему переменная, которая должна быть передана в контекст, не является местом для отладки, на ваш взгляд.Просто перетащите import pdb;pdb.set_trace() куда-нибудь, прежде чем ваш взгляд вернется, и возитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...