Make django templates strict

Consider using the django-shouty-templates app: https://pypi.org/project/django-shouty-templates/

This app applies a monkeypatch which forces Django’s template language to error far more loudly about invalid assumptions. Specifically:

  • chef would raise an exception if the variable were called sous_chef.
  • chef.can_add_cakes would raise an exception if can_add_cakes was not a valid attribute/property/method of chef

It ain’t compile time safety, but it’s better than silently swallowing errors because you forgot something!


This hack from djangosnippets will raise an exception when an undefined variable is encountered in a template.

# 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()

Django<=1.9

Set TEMPLATE_STRING_IF_INVALID = 'DEBUG WARNING: undefined template variable [%s] not found' in your settings.py.

See docs:
https://docs.djangoproject.com/en/1.9/ref/settings/#template-string-if-invalid

Django>=1.10

Set string_if_invalid = 'DEBUG WARNING: undefined template variable [%s] not found' template option in your settings.py.

See docs: https://docs.djangoproject.com/en/2.0/topics/templates/#module-django.template.backends.django

Also read: http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables