今天在邮件列表中讨论一个关于模板导入路径的问题,这使得我发现,模板目录的配置可以更简单的。一般来说,如何让 django 找到一个模板,常用的方法是在 settings.py 中修改 TEMPLATE_DIRS 的值,把你的路径加进去。但这不是最方便的做法。还有一种就是在你的 app 中创建一个 templates 的目录,模板就放在它的下面即可。 django  在导入模板时,会自动根据 INSTALLED_APPS 中的模块配置来找到这个目录,然后导入模板。

主要的实现是通过 settings.py 中的:

TEMPLATE_LOADERS = (
    ‘django.template.loaders.filesystem.load_template_source’,
    ‘django.template.loaders.app_directories.load_template_source’,
#     ‘django.template.loaders.eggs.load_template_source’,
)

来控制的。TEMPLATE_LOADERS 实际上定义了一个模板导入器,django在导入模板时会依次调中。找到第一个就返回。因此从上面的导入顺序来看,首先是调用filesystem.load_template_source来导入,而它会使用TEMPLATE_DIRS来进行搜索,因此上首先是从TEMPLATE_DIRS所设置的目录下搜索指定的模板。然后是调用app_directories.load_template_source来导入模板,它就会根据INSTALLED_APPS中安装的模板依次查找templates目录,然后再判断是否存在模板。因此上它的导入是按安装模块的排列顺序进行的。

了解了这点,我们以后写模板就省事了。在app的目录下创建templates目录,然后最好是建一个与app同名的目录,在这个目录下使用模板。这样就不用在settings.py中配置模板路径了。为什么要建一个子目录呢?为了避免有相同的模板名,便于区分。这样以后移植也方便。记得以前唐晓平和我说过这事,但我忘了。现在知道也不算晚。


1条评论

  1. 果然是很方便的办法,这样模板文件管理就更方便了。谢谢!

发表评论

评论也有版权!