我一直试图让 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