Global custom tags

6 views
Skip to first unread message

diogobaeder

unread,
Jul 2, 2009, 5:55:22 PM7/2/09
to Django users
Hi there,

Is there a way to create a custom tag that can be used in different
applications at the same time, so that I could make the call on the
"base.html" template? The custom tag, here, is a blog subjects menu,
which I
want to use in all the pages (all the apps) of the website, in the
frontend.

I know that I must create a "templatetags" subdirectory, to act as a
module, inside the apps, if I want to create a template tag for that
app,
but what if I want to make it visible to all apps and callable from a
base
template?

Thanks!

Jonathan Buchanan

unread,
Jul 2, 2009, 8:23:07 PM7/2/09
to django...@googlegroups.com

If it only needs to be called in the base template, you could just {%
load %} and call it there as normal.

If it really does need to be available globally:

http://www.djangosnippets.org/snippets/160/

Regards,
Jonathan.

diogobaeder

unread,
Jul 2, 2009, 10:59:10 PM7/2/09
to Django users
But where do I put the custom template, than? If I load it from an app
template, I must create it under <app>/templatetags/, and what if I
want to call it from the base template? <project_root>/templatetags/?

Thanks!

Diogo



On Jul 2, 9:23 pm, Jonathan Buchanan <jonathan.bucha...@gmail.com>
wrote:

koenb

unread,
Jul 3, 2009, 2:10:53 AM7/3/09
to Django users
On 3 jul, 04:59, diogobaeder <diogobae...@gmail.com> wrote:
> But where do I put the custom template, than? If I load it from an app
> template, I must create it under <app>/templatetags/, and what if I
> want to call it from the base template? <project_root>/templatetags/?
>
> Thanks!
>
> Diogo
>

I think you are missing something here: there really is no app
namespacing in templatetags: if you try to load a tag library, django
will search the templatetags folders located underneath all installed
apps. If it finds one that matches, it will use that one. This means
that you can use a tag library from app X in any template you use (no
matter where it is located), as long as app X is in the installed
apps. The downside of this is that you need to name your tag libraries
wisely, because tags.py in app X and tags.py in app Y will conflict.

Koen

diogobaeder

unread,
Jul 3, 2009, 2:56:48 PM7/3/09
to Django users
Great, koenb, now its getting even clearer to me! :-)

Thanks for the light,

Diogo

diogobaeder

unread,
Jul 4, 2009, 11:51:42 PM7/4/09
to Django users
Koen,

I tried to make an initial template tag, just to test and learn, but
it's not working. I followed the instructions here
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags
and registered the compilation function, but it's not finding the
module, like stated here in this stack trace, even though I've saved
the _init_.py file:
http://dpaste.com/63306/

The code I used to test it is here:
http://dpaste.com/63308/

Any ideas?

Thanks again!

Diogo



On Jul 3, 3:10 am, koenb <koen.bierm...@werk.belgie.be> wrote:

Ronghui Yu

unread,
Jul 5, 2009, 5:32:22 AM7/5/09
to django...@googlegroups.com
_init_.py should be

__init__.py

or just a typo error in the mail?

diogobaeder 写道:

diogobaeder

unread,
Jul 5, 2009, 12:09:00 PM7/5/09
to Django users
Thanks, Yu, it was a lack of attention of mine, not just a typo... I
corrected the file name, now the module is being found, thanks! :-)

Diogo



On Jul 5, 6:32 am, Ronghui Yu <stone...@gmail.com> wrote:
> _init_.py should be
>
> __init__.py
>
> or just a typo error in the mail?
>
> diogobaeder ??:
>
>
>
> > Koen,
>
> > I tried to make an initial template tag, just to test and learn, but
> > it's not working. I followed the instructions here
> >http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howt...
> Ronghui Yu <mailto:stone...@163.com>

diogobaeder

unread,
Jul 6, 2009, 3:46:22 AM7/6/09
to Django users
Great, guys! Solved! Now I have a global custom tag for recursive
nested list in all the views! Nice! :-)

Next step: see if my hosting privider has python-memcache to put these
guys under a cache... doesn't sound nice to have these repeated
queries on a bank, considering they won't change so much... :-P

Thanks for the help, guys! Thread solved!

Diogo
Reply all
Reply to author
Forward
0 new messages