Template ======== :synopsis: template utilities in django-boost Strict invalid template variables --------------------------------- ``StrictInvalidTemplateVariable`` raises an exception when a Django template tries to render an invalid or missing variable. It provides Jinja2 ``StrictUndefined``-like behavior for Django templates, which is useful when you want missing template variables to fail fast instead of rendering as empty strings. Use it as Django's ``string_if_invalid`` template option:: from django_boost.template import StrictInvalidTemplateVariable TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { "string_if_invalid": StrictInvalidTemplateVariable(), }, }, ] By default, missing variables raise ``ValueError`` with the missing template variable name in the message. You can customize the message or exception class:: class TemplateVariableError(Exception): pass TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": True, "OPTIONS": { "string_if_invalid": StrictInvalidTemplateVariable( message="Missing template variable: {name}", exception_class=TemplateVariableError, ), }, }, ] Limitations ----------- ``StrictInvalidTemplateVariable`` only raises on the resolution path Django routes through ``string_if_invalid % var``. It does not cover every invalid lookup, so unlike Jinja2 ``StrictUndefined`` it is not strict everywhere: - Tags that resolve variables while ignoring failures -- ``{% if %}``, ``{% for %}``, ``{% firstof %}`` and the like -- never reach it, so a missing variable there is still treated as falsy/empty instead of raising. - A method marked ``alters_data`` or one that requires arguments yields Django's invalid marker without the ``%`` step, so it renders the literal ``%s`` rather than raising.