I know this thread has been dead for over 2 years, but I've been trying to 
solve this problem or a similar problem today for a library I'm working on.

I've only tested it with the filesystem and app_directories loaders, but 
the code I've got to so far looks like this:

for loader in settings.TEMPLATE_LOADERS:
    loader_module = 
importlib.import_module('.'.join(loader.split('.')[:-1]))
    print '\n'.join(source for source in 
loader_module.Loader().get_template_sources(''))

Just thought I'd share it in case anyone was interested.

Cheers,


William

On Saturday, February 11, 2012 5:30:50 PM UTC+2, pw wrote:
>
> Thanks for weighing in, that is helpful, and last night I was playing 
> around with a somewhat similar approach. It's not exactly what I was hoping 
> for, because it still isn't really integrated with the way Django uses 
> template loaders.
>
> This solution works for TEMPLATE_DIRS and INSTALLED_APPS, but there are 
> other possible template loaders, or a user might have written a custom 
> template loader. Or they may have disabled the app directories loader… 
> Anyway, you get the idea.
>
> If the built-in loader classes had some method that would just return the 
> paths to the template directories that were loaded, this could work 
> perfectly, but I think the loaders can only check to see if a supplied 
> template name exists on one of the paths they serve. So it seems like my 
> idea is not really feasible in a way that integrates cleanly with Django 
> and results in a portable application. Thanks to everyone who replied with 
> assistance.
>
> - Patrick
>
> On Saturday, February 11, 2012 at 5:39 AM, bb6xt wrote:
>
> Here's my two cents. Hope it helps some.
>
> from proj.settings import TEMPLATE_DIRS, INSTALLED_APPS
> import os
>
> def recursive_search(path):
> result = []
> for i in os.listdir(path):
> if not os.path.isdir(os.path.join(path, i)):
> result.append(i)
> else:
> result.extend(recursive_search(os.path.join(path, i)))
> return result
>
> def myview(request):
> templates = []
> # the next 2 lines handles templates in explicit template
> directories
> for path in TEMPLATE_DIRS:
> templates.extend(recursive_search(path))
> # the next 2 will handle template dir generated py the
> appdirectories loader excluding contrib apps
> for app in INSTALLED_APPS:
> if app.startswith('proj'):
> if os.path.exists(os.path.join(ABSPATH_TO_PROJ,
> app.split('.')[-1], 'templates')):
> templates.extend(recursive_search(os.path.join(ABSPATH_TO_PROJ,
> app.split('.')[-1], 'templates')))
>
> well, you have a list of templates with which you can do as you
> please. surely you'll want to keep track of the actual path django
> uses to locate these templates, you can do so by tweaking the
> recursive_search funct a little
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/92d8ba74-700a-420e-8c12-10140e1c7073%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to