Hi,

I have identified a few issues over the time that makes working with custom
django template tags/filters a little less than ideal for me.

My chief problem is: if I see an unknown/unfamiliar tag/filter and want to
locate the exact code responsible, I have to do the following: find all
loads defined in the template, for each of those "loaded template
libraries", I have to find the py file by searching it in all
INSTALLED_APPS/templatetags folder and then scanning them for a
register_tag/register_filter call with the unknown name. This to me is a
little bit too much magical[PS1]. Further, what if there are more than one
apps with some_template.py in their templatetags folder? And why is it
called templatetags when it can have both filters and tags? (*tongue in
cheek remark :-).

Bottom line is clean namespacing is difficult to achieve as of now, but
would be possible with the following "syntax":

{% load mytemplatelib.few_tags as cool_tags %}

and used subsequently as {% cool_tags.show_something %}. Or the alternate
syntax:

{% load mytemplatelib.few_tags.* %} and I can do {% show_something %} [this
sytax would come with its warning similar to the ones issued against using
the "from django import *" like imports in python].

Note: mytemplatelib.few_tags would be search in sys.path and not in
installed_apps' templatetags folders.

As a template writer I will have to provide a module mytemplatelib.few_tags
with a show_something named function which acts as a tag. There would be
some decorators/protocol to tell if they are valid tag/filter.

Assuming the idea is accepted, It can be implemented in a mostly backward
compatible fashion, post 1.0, either by having a {% import %} named new
loader for 1.x, or even {% load %} name can be preserved as one can first
look into the old way of loading and if it fails can look for new way.

This has been discussed before[1], but I have some objections with the
latest implementation[2]:
* appname/templatetags still persist, and is the place where libraries will
be looked into, there is no reason for django to enforce and create its own
import paths, PYTHONPATH, sys.path etc are good enough for that. Let
application developers and templatetags library writer pick what makes
sense. Looking into INSTALLED_APPS constraint does not buy much and can be
cleaned up entirely.
* We still have to do the search if we get a new/unfamiliar template
tag/filter. This is just not pythonic to me.

Both these are backward incompatible changes, but like I said current way
can be kept, with some DepricationWarning, and 1.x may include the new way
which looks for module name in sys.path instead of app_name/templatetags/.

Subproposal:

Add settings: DEFAULT_TEMPLATE_EXTENSIONS [avoiding the words tags/filter as
it can be either], being a list of strings that will be automatically be {%
load whatever %} in all templeates.

Subsubproposal:

Split defaulttags into defaulttags_essentials which will include tags like
"load", "extends", "block" etc, which are really required for templates to
work vs others like "for"/"if" and the rest into some other module that gets
added by default in "settings.DEFAULT_TEMPLATE_EXTENSION". So that if I can
use the fancier versions of my template tags/filters by turning off the
django ones and using just mine, without having to use any namespace prefix,
and without having to worry abt conflicts with django's default template
tags/filters.

PS1: Though there is nothing stopping me from writing a script that takes
the tag/fitler name and returns me the qualified name of the function
handling the tag/filter.
[1]:
http://groups.google.com/group/django-developers/browse_frm/thread/2b5a4a31f0349d27/b92c96a8dccc214b#b92c96a8dccc214b
[2]:
http://code.djangoproject.com/attachment/ticket/2539/patch_2539_code_tests.diff

-- 
Amit Upadhyay
Vakow! www.vakow.com
+91-9820-295-512

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to