On occasion, I've used the following technique in my django templates:

# parent.html 

{% block someblock %}
…stuff…
  {% if cool_optional_feature_is_enabled %}
    …optional stuff...
  {% endif %}
…stuff...
{% endblock %}


# child.html
{% extends "parent.html" %}

{% block someblock %}
  {% with True as cool_optional_feature_is_enabled %}
    {{ block.super }}
  {% endwith %}
{% endblock %}


The cool thing is that this technique allows a child template to 
essentially enable a feature in the parent template. The same technique can 
also be used to disable a feature in the parent template, or really 
anything that can be driven from a context variable, since, as I understand 
it, that is what the with statement is doing: temporarily injecting a 
variable into the context within which the expressions in a chunk of 
template code are evaluated against.

I was showing this to a colleague today and, though he thought it was neat, 
he had never seen it before and was concerned that it was not a mainstream 
use of the django template language. I did some cursory google searches and 
couldn't find any overt references to this ability either.

My concern is that I may be relying on some undocumented side-effect of the 
way that blocks or the with statement are implemented and that, at some 
point in the future, this will be changed and all of my templates that use 
this will break.
 

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to