pytest-django icon indicating copy to clipboard operation
pytest-django copied to clipboard

Do not fail invalid template variables with default filter

Open jcushman opened this issue 5 years ago • 0 comments

As proposed in #471, here is an update to --fail-on-template-vars that causes missing template variables to be ignored if they use the default filter, like {{ does_not_exist|default:"ok" }}.

This is a common and documented idiom in Django, so --fail-on-template-vars is more useful if it doesn't fail in that situation. I most recently ran into this because the django-pipeline package uses {{ media|default:"all" }} in one of its templates without defining media, so --fail-on-template-vars is currently incompatible with django-pipeline.

Another common example would be a view like render('my_page.html') with the base template <title>{{ title|default:"My Site" }}</title>. It's not helpful to require each page that doesn't override title to be called as render('my_page.html', {'title': None}) -- that's the point of providing a default.

@codingjoe seemed unsure how messy this would be to implement, so I thought it might be useful to see an implementation.

jcushman avatar Apr 19 '21 21:04 jcushman