TEMPLATE_DIRS = ('/path/to/templates/',)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
我正在尝试找到一个解决方案,列出我在这些位置(TEMPLATE_DIRS
或TEMPLATE_LOADERS
)中指定目录的内容。
我需要类似的东西:
template_files = []
for dir in EVERY_DIRECTORY_DJANGO_LOOKS_FOR_TEMPLATES_IN:
template_files.append(os.listdir(dir))
答案 0 :(得分:11)
如果有人仍然需要这个,我正在运行1.9.2它看起来像
app_template_dirs
现在是get_app_template_dirs
,settings.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_DIRS
是django.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))