Django是否仅认可templates作为模板文件夹名?如何自定义?
Django自定义模板文件夹名的解决方案
Django并非只能使用templates作为模板文件夹名,完全可以自定义为用户易懂的名称,只是默认的模板查找逻辑会优先识别应用内的templates目录,所以改名后需要调整配置让Django识别自定义目录。
问题原因
你修改了根目录的模板文件夹名并更新了DIRS配置,这部分能被Django的文件系统加载器识别;但应用内的自定义模板文件夹(main/somethingElse),默认的应用目录加载器只会查找应用下的templates目录,所以无法被识别。
解决方法
方法1:手动添加应用内的自定义模板目录到DIRS
这是最直观的方案,适合教学场景,容易理解:
在settings.py的TEMPLATES配置中,把应用内的自定义模板目录直接加入DIRS列表:
# settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ BASE_DIR / 'somethingElse', # 根目录的自定义模板文件夹 BASE_DIR / 'main' / 'somethingElse', # main应用内的自定义模板文件夹 # 如有其他应用,按同样格式添加它们的自定义模板目录 ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
配置后,Django会从这些指定路径中查找模板文件。
方法2:自定义应用目录加载器,统一指定模板文件夹名
如果有多个应用,不想逐个添加目录,可以修改加载器配置,让Django自动查找所有应用下的自定义模板目录:
# settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ BASE_DIR / 'somethingElse', # 根目录的自定义模板文件夹 ], 'APP_DIRS': False, # 关闭默认的应用templates目录查找 'OPTIONS': { 'loaders': [ # 自定义应用目录加载器,指定模板目录名为somethingElse ('django.template.loaders.app_directories.Loader', { 'dirs': ['somethingElse'], }), 'django.template.loaders.filesystem.Loader', ], 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
这样配置后,所有已安装应用下的somethingElse目录都会被自动扫描,无需逐个添加路径。
注意事项
- 模板继承的语法不需要修改,比如原来的
{% extends 'base.html' %}依然有效,因为根目录的自定义模板文件夹已加入DIRS,base.html能被正常找到。 - 检查自定义文件夹的路径拼写是否正确,可通过
print(BASE_DIR / 'main' / 'somethingElse')输出路径,确认目录实际存在。
内容的提问来源于stack exchange,提问作者Cheesewaffle
相关产品推荐
相关产品推荐

