# Some examples here for illustrate better my point of view:
from django.template import Context, Template
# CASE_1: shouldn't raise an exception because 'foo' variable exists in the context and 'default' filter
# shouldn't be invoked,
Template('{{ foo|default:notreal }}').render(Context({'foo': ''})) #so, the output should be ''
# CASE_2: should raise an exception because 'foo' variable not exist in the context and 'default' filter
# will be invoked with non existent variable as argument,
Template('{{ foo|default:notreal }}').render(Context({})) #so, the output should be the exception VariableDoesNotExist
# CASE_3: should raise an exception because although 'foo' variable exists in the context and 'default' filter
# shouldn't be invoked, the filter 'center' is called with non existent variable as argument,
Template('{{ foo|default:notreal|center:notreal2 }}').render(Context({'foo': '', })) #so, the output should be the exception VariableDoesNotExist but for 'notreal2' variable
# CASE_4: shouldn't raise an exception because 'foo' variable exists in the context and 'default' filter
# shouldn't be invoked and also the filter 'center' is called with existent variable as argument,
Template('{{ foo|default:notreal|center:notreal2 }}').render(Context({'foo': 'django', 'notreal2':'15' })) #so, the output should be ' django '
# and the same reasoning and analogous examples should be derived for 'default_is_none' filter, only having in mind the definition of that filter