9

我一直试图让 django-allauth 工作几天,我终于发现了发生了什么。

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

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

4

6 回答 6

9

我遇到了相反的问题:我试图使用自己的base.html文件,但我的 Django 项目正在django-allauth获取base.html. 事实证明,您定义的顺序INSTALLED_APPSsettings.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'),
]
于 2019-08-29T03:16:22.380 回答
7

除非直接调用,否则 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" %}.

于 2013-05-13T16:05:32.493 回答
3

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

github 上,我发现所有 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. 现在它是多余的。

完毕!

于 2015-02-13T01:24:15.823 回答
2

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

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

问题解决了。

于 2018-12-29T06:56:08.180 回答
1

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

base.html因此,例如复制到myapp/templates/account/base.html,并确保myapp在之前加载django-allauth(通过将其放在更高的位置INSTALLED_APPS)。

现在 django auth 模板将扩展account/base.htmldjango-allauthbase.html.

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

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

于 2015-06-12T13:49:27.967 回答
1

Allauth试图扩展myproject/templates/base.html。最简单的方法是移动base.htmlmyproject/templates/site/以获取 myproject/templates/site/base.html或简单地重命名base.html

于 2016-08-21T17:43:55.347 回答