On Jul 14, 11:15 pm, Russell Keith-Magee <russ...@keith-magee.com> wrote: > > I'm not wildly enthusiastic about this. You've posted this snippet (or > something like it) a couple of times, and every time my immediate > reaction has been "You're in a twisty maze of endtemplatedir tags, all > alike" :-) > > I can see what you're trying to do in terms of setting default > directories; but the syntax you are proposing: > > * makes the representation of setting a default over a wide range quite > elegant > * makes the representation for overriding a default on a single > field/form quite verbose. > > To me, this seems like priorities the wrong way around. Overriding a > single default should be the simple case, not the verbose case. > Consider the template where you want to override the default widget on > every field on a form - your entire form will potentially be a nest of > {% templatedir %}{% endtemplatedir %} tags.
Thanks for the feedback, Russ. I'm not set on any particular syntax, I just wanted to demonstrate the idea of augmenting the path that template loaders use as a way of customising presentation for a group of pages, a single page, a group of elements on a page, or a single element on a page. I admit that several instances of {% templatedirs "mypath" %} {{ form.field %}{% endblock %} or nested calls to {% templatedirs %}{% endtemplatedirs %} in a template could get messy. I'm not sure how else it could be done though, without tying it to a positional argument to {% form %} and {% field %} tags, in which case it would need to be added to every template tag you might want to override templates for in this way. It might also be more difficult to override when you have pluggable apps that include templates which already use the {% form %} and {% field %} templates. One thing to keep in mind is that you could actually wrap your entire form (or page, or master template) in a {% templatedirs %} block tag and then simply add/remove templates from your file system, without having to make any other changes to existing or pluggable templates in order to explicitly replace the templates for specific elements. The {% form %} and {% field %} template tags could even be updated to look for multiple templates, based on their name as well as their type. I'm thinking of something like the admin here, where you can define templates at different locations in order to apply them with more or less granularity. For example: In your projects master template you wrap the whole thing in {% templatedirs "myforms" %}{% endblock %}. Then, in any of the templates derived from your master template (but not templates that belong to pluggable apps that extend their own master template), the template engine will look there first when loading templates. Effectively adding a folder to the TEMPLATE_DIRS setting, but only for templates that extend your master template, without affecting other pluggable apps that you might be using. Then, if you tried to render a form that had been assigned a name or id of "contact", it would try to load: myforms/django/forms/contact.html myforms/django/forms/default.html django/forms/contact.html django/forms/default.html And if you tried to render a field on the contact form that has a name of "email", it would try to load: myforms/django/formfields/contact/email.html myforms/django/formfields/contact/default.html myforms/django/formfields/email.html myforms/django/formfields/default.html django/formfields/contact/email.html django/formfields/contact/default.html django/formfields/email.html django/formfields/default.html Perhaps the block tag could either accept multiple paths to search, to avoid ugly nesting. Or alternatively it could require two arguments, the first being the path to search, and the second a filter so that search paths are not searched unecessarily. E.g. if you knew you only wanted to load temlates from "myforms" instead of "django/forms", you could do {% templatedirs "myforms" "django/forms" %}...{% endtemplatedirs %}? Or, perhaps it doesn't need to be a block level tag. Perhaps it just just applies to the whole template, like {% load %}? Just food for thought. Cheers. Tai. -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.