IMO Django is missing a setting TEMPLATE_STRING_IF_INVALID that you cold set to globally override how None value is rendered.
Some argue that you should:
- plan to always have a value — ?! what a perverted idea, all fields required
- use empty string as a default — django does that, I do not like it, form fields return empty strings for empty fields
- use default_if_none filter — to much typing
- use if tag — see 3.
There is a difference between empty string value and no having value at all. But in templates in most cases there is not, and django handles it backwards — it differentiate these in templates but in actual data model None is defaulted to empty string.
Not having a value at all — hence None — mean you do not have to store metadata for a filed, which is good for rg. in GAE.
Put this in your main.py — where you initialize wsgi application — to render empty string for None valued variables:
# Patch template Variable to output empty string for None values from django.template.base import Variable _resolve_lookup = Variable._resolve_lookup def new_resolve_lookup(self, *args, **kwargs): o = _resolve_lookup(self, *args, **kwargs) return o or u"" Variable._resolve_lookup = new_resolve_lookup