Python Django allauth加载错误的base.html模板

Python Django allauth加载错误的base.html模板,python,django,django-allauth,Python,Django,Django Allauth,我已经试着让django allauth工作了几天,我终于发现了到底发生了什么 该应用程序没有加载随django allauth一起安装的base.html模板,而是加载我在网站其余部分使用的base.html文件 如何告诉django allauth使用virtualenv/lib/python2.7/sitepackages/django allauth目录中的base.html模板而不是我的project/template目录?除非直接调用,否则您的base.html是您定义的模板的扩展

我已经试着让django allauth工作了几天,我终于发现了到底发生了什么

该应用程序没有加载随django allauth一起安装的
base.html
模板,而是加载我在网站其余部分使用的
base.html
文件


如何告诉django allauth使用
virtualenv/lib/python2.7/sitepackages/django allauth
目录中的base.html模板而不是我的
project/template
目录?

除非直接调用,否则您的
base.html
是您定义的模板的扩展

例如,如果您呈现一个名为
Page.html
-的模板,则顶部将显示
{%extends“base.html”%}

如上文所述定义时,
base.html
位于
settings.py
TEMPLATE_DIRS=()
下定义的路径中,根据您的描述,该路径定义为
project/TEMPLATE

最好将django allauth
base.html
文件复制到定义的
TEMPLATE\u DIRS
位置,将其重命名为
allauthbase.html
,然后通过
{%extends“allauthbase.html%}扩展模板以包含它而不是默认的base


或者,您可以向模板位置添加一个子文件夹,如
project/template/allauth
,将allauth
base.html
放在那里,然后使用
{%extends“allauth/base.html”%}

两年后,这仍然是一个问题,并且公认的答案缺少一些新信息

在上,我发现所有allauth模板都派生自account/base.html,它派生自base.html。我的解决办法是:

  • virtualenv/lib/python2.7/sitepackages/django allauth/templates
    中,复制
    base.html
    的全部内容以替换
    account/base.html
    中的所有内容(即替换
    {%extends'base.html%}
    语句)
  • 删除allauth的
    base.html
    。它现在是多余的

完成了

django allauth
模板似乎扩展了
account/base.html
(),它扩展了
base.html

因此,请复制到例如
myapp/templates/account/base.html
,并确保
myapp
django-allauth
之前加载(将其放在安装的应用程序中的较高位置)

现在django auth模板将扩展您的
account/base.html
,它将是
django allauth
base.html

它并不完美,因为django allauth的
base.html
可能会更新,而您将错过这些更新。但这似乎比重命名所有导入或更改django allauth代码要好


请注意,您也可以在内容周围的
base.html
中放置一个
{%block content%}
,然后
django allauth
将使用该样式,这在许多情况下似乎是一件好事。

allauth
尝试扩展
myproject/templates/base.html
。最简单的方法是将
base.html
移动到
myproject/templates/site/
,以获得
myproject/templates/site/base.html
,或者简单地重命名
base.html

所有提供的答案都会迫使您重写文件并修改自己的项目以适应allauth,这是一个完全不可接受的工作流。这样的第三方应用程序不应该对您自己的项目具有如此大的操纵力

确实,处理这种情况的最简单方法,尤其是根据提供的答案,就是简单地将allauth应用程序及其相关应用程序移动到
settings.py
文件中
INSTALLED_apps
列表的末尾。Django会先找到你的
base.html
模板,然后再在下面列出的其他应用程序中找到另一个
base.html
模板


问题解决。

我遇到了相反的问题:我试图使用自己的
base.html
文件,但我的Django项目正在获取
Django allauth
版本的
base.html
。事实证明,在
settings.py
中定义
已安装的应用程序的顺序会影响模板的呈现方式。为了让my
base.html
呈现而不是
django allauth
中定义的呈现,我需要定义
已安装的应用程序,如下所示:

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'),
]

对。在我可以吻你的时候,我不明白这些事情。你救了我,让我不至于抛弃阿卢斯!