在Django中,模板加载器(Template Loaders)负责找到和加载模板文件。Django自带几种模板加载器,同时也允许开发者自定义加载器。
Django提供了以下模板加载器:
AppDirectoriesLoader
:在INSTALLED\_APPS设定的每个应用的templates
子目录中查找模板。FilesystemLoader
:在文件系统的指定位置查找模板。DjangoLoader
:查找在Django代码库内的模板。
自定义模板加载器需要继承django.template.loader.BaseLoader
类,并实现get_template
和get_template_sources
方法。
例如,创建一个简单的模板加载器,它从一个特定的目录加载模板:
from django.template.loader import BaseLoader
import os
class MyLoader(BaseLoader):
def __init__(self, template_dir):
self.template_dir = template_dir
def get_template(self, template_name, template_dir=None):
file_path = os.path.join(self.template_dir, template_name)
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
def get_template_sources(self, template_name, template_dir=None):
if template_dir is None:
template_dir = self.template_dir
yield os.path.join(template_dir, template_name)
# 使用自定义加载器
my_loader = MyLoader('/path/to/templates')
template_source = my_loader.get_template('mytemplate.html')
在Django设置中配置自定义模板加载器:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'OPTIONS': {
'loaders': [
('django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'path.to.MyLoader.MyLoader'), # 添加自定义加载器
],
# ...其他选项
},
},
]
在这个例子中,MyLoader
类接收一个模板目录路径,并从中加载模板文件。在Django的TEMPLATES设置中,将自定义的加载器添加到loaders
选项列表中。