模版装载机
内部模板加载
通常,您将模板存储在文件系统的文件中,而不是自己使用低级别的模板API。 将模板保存在指定为模板目录的目录中。 Django根据您的模板加载设置(请参阅下面的“加载器类型”)在许多位置搜索模板目录,但指定模板目录最基本的方法是使用DIRS选项。
DIRS选项
通过使用设置文件的TEMPLATES设置中的DIRS选项或者Engine的dirs参数来告诉Django你的模板目录是什么。 这应该被设置为包含模板目录完整路径的字符串列表:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'/home/html/templates/lawrence.com',
'/home/html/templates/default',
],
},
]
只要目录和模板可以被Web服务器读取,你的模板就可以到达任何你想要的地方。 他们可以有任何你想要的扩展名,如.html或.txt,或者根本没有扩展名。 请注意,即使在Windows上,这些路径也应该使用Unix风格的正斜杠。
加载程序类型
默认情况下,Django使用基于文件系统的模板加载器,但是Django提供了一些其他模板加载器,它们知道如何从其他来源加载模板; 其中最常用的应用程序加载器如下所述。
文件系统加载器
filesystem.Loader根据DIRS <TEMPLATES-DIRS>加载文件系统中的模板。 这个加载器默认是启用的。 但是,在将DIRS <TEMPLATES-DIRS>设置为非空列表之前,它不会找到任何模板:
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
}]
应用目录加载器
app_directories.Loader从文件系统上的Django应用程序加载模板。 对于INSTALLED_APPS中的每个应用程序,加载器查找模板子目录。 如果该目录存在,Django将在其中查找模板。 这意味着您可以使用您的个人应用程序存储模板。 这也使得使用默认模板来分发Django应用程序变得很容易。 例如,对于这个设置:
INSTALLED_APPS = ['myproject.reviews', 'myproject.music']
get_template('foo.html')将按以下顺序在这些目录中查找foo.html:
- /path/to/myproject/reviews/templates/
- /path/to/myproject/music/templates/
并将使用它找到的第一个。
INSTALLED_APPS的顺序非常重要!
例如,如果您要自定义Django管理员,可以选择使用myproject.reviews中的admin / base_site.html覆盖来自django.contrib.admin的标准admin / base_site.html模板。
然后你必须确保你的myproject.reviews在INSTALLED_APPS中的django.contrib.admin之前,否则django.contrib.admin将被加载,你的将被忽略。
请注意,加载器在第一次运行时执行优化:它缓存一个INSTALLED_APPS包具有模板子目录的列表。
您可以通过将APP_DIRS设置为True来启用该加载器:
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
}]
其他装载机
其余的模板加载器是:
- django.template.loaders.eggs.Loader
- django.template.loaders.cached.Loader
- django.template.loaders.locmem.Loader
这些加载器在默认情况下是禁用的,但是可以通过在“模板”设置中将“加载器”选项添加到DjangoTemplates后端或将加载器参数传递给引擎来激活它们。 有关这些高级装载机的详细信息,以及构建您自己的自定义装载机,可以在Django Project网站上找到。