我一直试图让 django-allauth 工作几天,我终于发现了发生了什么。
base.html
该应用程序没有加载使用 django-allauth 安装的模板,而是加载了base.html
我用于网站其余部分的文件。
我如何告诉 django-allauth 使用目录中的 base.html 模板virtualenv/lib/python2.7/sitepackages/django-allauth
而不是我的project/template
目录?
我一直试图让 django-allauth 工作几天,我终于发现了发生了什么。
base.html
该应用程序没有加载使用 django-allauth 安装的模板,而是加载了base.html
我用于网站其余部分的文件。
我如何告诉 django-allauth 使用目录中的 base.html 模板virtualenv/lib/python2.7/sitepackages/django-allauth
而不是我的project/template
目录?
我遇到了相反的问题:我试图使用自己的base.html
文件,但我的 Django 项目正在django-allauth
获取base.html
. 事实证明,您定义的顺序INSTALLED_APPS
会settings.py
影响模板的呈现方式。为了让我的 base.html
渲染而不是 中定义的渲染django-allauth
,我需要定义INSTALLED_APPS
如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# custom
'common',
'users',
'app',
# allauth
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
除非直接调用,否则 yourbase.html
是您定义的模板的扩展。
例如,如果您Page.html
在顶部渲染一个名为 - 的模板,您将拥有{% extends "base.html" %}
.
如上所述定义时,base.html
位于您在下定义的路径中settings.py
-TEMPLATE_DIRS = ()
根据您的描述,该路径定义为project/template
.
您最好的选择是将 django-allauthbase.html
文件复制到定义的TEMPLATE_DIRS
位置,将其重命名为allauthbase.html
,然后扩展您的模板以包含它,而不是通过{% extends "allauthbase.html" %}
.
或者,您可以将子文件夹添加到模板位置,例如project/template/allauth
,将 allauth 放在base.html
那里,然后使用{% extends "allauth/base.html" %}
.
两年后,这仍然是一个问题,并且公认的答案缺少一些新信息。
在github 上,我发现所有 allauth 模板都派生自 account/base.html,而后者派生自 base.html。我的解决方案是:
virtualenv/lib/python2.7/sitepackages/django-allauth/templates
,复制全部内容base.html
来替换里面的所有内容account/base.html
(即替换{% extends 'base.html' %}
语句)base.html
. 现在它是多余的。完毕!
提供的所有答案都迫使您重写文件并修改自己的项目以适应 allauth,这是一个完全不可接受的工作流程。这样的第三方应用程序不应该对您自己的项目具有这种操纵力。
确实,处理这种情况的最简单方法,尤其是根据所提供的答案,就是简单地将 allauth 应用程序及其相关应用程序移动到文件中INSTALLED_APPS
列表的settings.py
末尾。Django 会在它在它下面列出的其他应用程序中base.html
找到另一个模板之前找到你的模板。base.html
问题解决了。
django-allauth
模板似乎扩展account/base.html
(示例),它扩展了base.html
.
base.html
因此,例如复制到myapp/templates/account/base.html
,并确保myapp
在之前加载django-allauth
(通过将其放在更高的位置INSTALLED_APPS
)。
现在 django auth 模板将扩展account/base.html
您django-allauth
的base.html
.
这并不完美,因为django-allauth
'base.html
可能会更新,您会错过这些更新。但这似乎比重命名所有导入或更改django-allauth
代码要好。
请注意,您也可以只{% block content %}
在您base.html
的内容周围放置一个,然后django-allauth
将使用该样式,这在很多情况下似乎是一件好事。
Allauth
试图扩展myproject/templates/base.html
。最简单的方法是移动base.html
到myproject/templates/site/
以获取 myproject/templates/site/base.html
或简单地重命名base.html