James Bennett wrote:
> On 6/6/07, Andrew R <[EMAIL PROTECTED]> wrote:
>> whereas I just want it to import "javadoc_filter" from my current dir. I'm
>> sure
>> this is by design in django but there must be a way around it.
>
> This is one of the tricky bits of Django that you don't often see.
> Django needs to have some consistent way of locating user-supplied tag
> libraries, so django/templatetags/__init__.py contains a short bit of
> code which loops through INSTALLED_APPS looking for any applications
> which include a "templatetags" module, and extends the import path
> under "django.templatetags" to include those modules.
Wow.
Thanks for this tip - it was the key to solving my problem.
Here is how I solved it (or worked around it), if it is useful to anyone else...
The first thing that is different about my app is that it is just a plain
command line utility that takes input and generates a suite of files using
templates, not a web application. That means that I didn't put my code in a
package or want a settings file.
By using the in-place config code I was able to avoid a django_settings.py file:
> import django.conf
> django.conf.settings.configure(
> TEMPLATE_DIRS =(this_dir),
> )
This worked up until I wanted my own filter.
Adding it under a templatetags dir/package didn't help.
The cause of the problem was that my code wasn't in a package per sae.
Workaround: make it look like my code is in a package.
(I could have actually *put* it in a package, but I didn't want to.)
So, code is under something like: C:\dev\foo\codeGenerator.py
then:
> from django.template import Context, Template, Library
>
> this_full_dir=os.path.abspath(os.path.dirname(sys.argv[0]))
> this_package_name=os.path.basename(this_full_dir)
> this_container_dir=os.path.abspath(os.path.join(this_full_dir, ".."))
> sys.path.append(this_container_dir)
>
> import django.conf
> django.conf.settings.configure(
> TEMPLATE_DIRS =(this_full_dir), # my templates are in the same dir
> INSTALLED_APPS = (this_package_name),
> )
this will automatically make sure that the dir *containing* my code is in the
path and that my pseudo-package is the name of my installed app.
I think a better long term solution is something like:
Template.add_templatetags_file('filename.py')
But in the absence of that, the above magic works :)
Thanks James + team
Andrew
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---