获取django从TEMPLATE_LOADERS和TEMPLATE_DIRS检测到的所有模板

时间:2013-06-14 15:17:43

标签: django python-2.7 django-templates

TEMPLATE_DIRS = ('/path/to/templates/',)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

我正在尝试找到一个解决方案,列出我在这些位置(TEMPLATE_DIRSTEMPLATE_LOADERS)中指定目录的内容。

我需要类似的东西:

template_files = []
for dir in EVERY_DIRECTORY_DJANGO_LOOKS_FOR_TEMPLATES_IN:
    template_files.append(os.listdir(dir))

2 个答案:

答案 0 :(得分:11)

如果有人仍然需要这个,我正在运行1.9.2它看起来像 app_template_dirs现在是get_app_template_dirssettings.TEMPLATE_DIRS现在是settings.TEMPLATES[0]['DIRS']

这就是我的所作所为:

from django.conf import settings
from django.template.loaders.app_directories import get_app_template_dirs
import os

template_dir_list = []
for template_dir in get_app_template_dirs('templates'):
    if settings.ROOT_DIR in template_dir:
        template_dir_list.append(template_dir)


template_list = []
for template_dir in (template_dir_list + settings.TEMPLATES[0]['DIRS']):
    for base_dir, dirnames, filenames in os.walk(template_dir):
        for filename in filenames:
            template_list.append(os.path.join(base_dir, filename))

然后,您可以根据需要使用template_list迭代列表:

for template in template_list:
    print template

答案 1 :(得分:3)

由于模板可以位于基本模板位置下的嵌套目录中,我建议使用os.walk来获取所需的模板,它实际上是os.listdir的包装器,它将跟随目录。

django.template.loaders.app_directories.app_template_dirs是所有应用模板目录的内部元组,TEMPLATE_DIRSdjango.template.loaders.filesystem.Loader使用的设置。

以下代码应该生成模板目录中所有可用文件的列表(这可能包括非模板文件):

from django.conf import settings
from django.template.loaders.app_directories import app_template_dirs

import os

template_files = []
for template_dir in (settings.TEMPLATE_DIRS + app_template_dirs):
    for dir, dirnames, filenames in os.walk(template_dir):
        for filename in filenames:
            template_files.append(os.path.join(dir, filename))