Django是如何找到我自定义的registration/login.html模板文件的?
Django查找自定义login.html模板的逻辑
Django的模板加载机制遵循固定的优先级规则,你的自定义模板能被正确加载,原因如下:
- 首先,Django 内置的
LoginView视图默认指定的渲染模板路径就是registration/login.html,当路由匹配到这个视图时,就会按照这个路径去查找模板文件。 - Django 模板查找优先级从上到下依次为:
- 首先检索
settings.py中TEMPLATES配置项的DIRS列表里定义的所有目录,按列表顺序查找对应路径的模板,找到就直接返回。 - 如果
DIRS中没有找到对应模板,且TEMPLATES配置里APP_DIRS被设置为True(默认值就是True),Django 会按照INSTALLED_APPS列表中应用的注册顺序,依次到每个应用下的templates目录里查找对应路径的模板,先匹配到的模板会被优先使用。
- 对应你的场景:
你的自定义模板存放在homepage应用下的templates/registration/login.html路径,只要你在INSTALLED_APPS中把homepage应用的注册顺序放在django.contrib.auth前面,Django 遍历应用模板目录时,就会先找到你编写的这个login.html,直接使用而不会继续查找django.contrib.auth自带的同名模板。
注意:即使视图是来自其他内置应用,只要模板路径匹配,Django 都会按照上述优先级规则查找模板,和视图所属的应用没有关系。
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

