一旦您了解了 Django 的 模板查找顺序 并根据需要正确配置 TEMPLATE =[],这将非常容易。如果只是覆盖 allauth 的模板,则无需使用视图或 Python 代码。
我们先来了解一下Django的模板查找顺序,一点点。 Django的模板查找顺序如下,所有这些都在项目的settings.py中TEMPLATE =[]里面配置。
我。 'Loader':让您可以选择使用负责定位模板、加载模板和返回模板对象的模板加载器。一般实现不会使用它。如果您尚未配置模板加载器,则以下两个选项之一将决定您的视图使用哪个模板。
二。 'DIRS':在这里你可以选择明确地告诉 Django 在哪里搜索模板,按顺序,从上到下。
三。 'APP_DIRS':如果此字段设置为 true,则 Django 会在您的应用程序目录中查找您的模板。要正确使用此选项,您需要按如下方式组织模板:
root_dir
app1_dir
templates
your_template.html
app2_dir
templates
your_template.html
您必须将您的模板目录命名为 "templates",并且您必须将模板放在该目录中才能正常工作
不过,第三个选项有点奇怪,如果在相应应用的模板目录中找不到您应用视图中的模板,Django 将通过其他应用的模板目录找到它。
如果模板组织得当并且模板的命名约定是标准化的,那么它会很好地工作,这样当在本地应用程序的目录中找不到模板时,不应该在其他应用程序的目录中错误地找到该模板。好吧,您可能在某些情况下希望它以这种方式工作。
现在,直接回答您的问题:
Allauth 默认使用以下模板:
Python installed directory or virtual env --> *Lib --> site-packages --> allauth --> templates*
您通常希望覆盖所有 allauth 的模板,因为它们非常基本,并且您希望全部美化/修改它们,如果您不想覆盖,以下是使您能够覆盖它们的步骤它们都按如下方式进行,但只是不要更改该模板的 HTML,简单!
假设你的项目结构如下:
projectdir
app1_dir
app2_dir
projectname_dir
将模板目录从Python installed directory or virtual env --> Lib --> site-packages --> allauth --> templates复制到您选择的目录,假设您选择将其保存在app1_dir中(您可以选择任何目录,没有区别,但您应该根据您的要求选择一个合适的目录),然后在 app1_dir 中创建一个名为 'allauth' 的目录(您可以将其命名为任何您喜欢的名称),然后将复制的 allauth 的模板目录粘贴到此目录中,所以现在您的项目结构如下所示:
projectdir
app1_dir
allauth
templates
account
openid
socialaccount
base.html
app2_dir
projectname_dir
在项目设置中更改您的TEMPLATES = [],如下所示:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'allauth', 'templates'),
],
'APP_DIRS': True,
},
]
这里 BASE_DIR 是 projectdir(根目录)
基本上,您可以将 allauth 目录中复制的模板目录保存在您选择的任何项目目录中,但您必须确保您在此处提供了正确的路径:
'DIRS': [os.path.join(BASE_DIR, 'allauth', 'templates')
如果它不起作用,请设置'APP_DIRS': False,然后您会看到来自 Django 的调试消息,并且它不会使用应用程序目录(站点包中的 allauth 目录)。然后查看该错误,您可能会发现您的配置有什么问题。