Niggle: Django lets you write custom tags and filters in Python to extend the template language. I like your angle on it a lot though. Having all of the functionality laid bare before you (we've always deliberately tried to avoid letting the template language become another programming language) has a definite advantage both in dealing with non-programmer designers and in encouraging application logic to stay out of the templates.
Custom tags don't really change anything -- unless you created a tag that eval()'d its content. Custom tags extend the list of constructs, but it is not the template programmer who is extending anything. Custom tags seem more like a localized or app/site/domain-specific set of constructs, and then you have the main Django tag list and the local tag list, but they are still lists.# Ian Bicking