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

9

我已经尝试了几天让django-allauth工作,最终找到了问题所在。

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

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

6个回答

9

我遇到了相反的问题:我试图使用自己的 base.html 文件,但我的 Django 项目却获取了 django-allauth 版本的 base.html。原来,在 settings.py 中定义 INSTALLED_APPS 的顺序会影响模板的渲染。为了让 我的 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'),
]

1
我真想亲吻你。你救了我,让我不至于放弃allauth! - jclark754

7
除非直接调用,否则您的base.html是您定义的模板的扩展。
例如,如果您呈现称为Page.html的模板-在顶部,您将有{% extends "base.html" %}
当上述定义时,base.html位于您在settings.py中定义的路径中,在那里您在TEMPLATE_DIRS =()下定义了项目/模板。
您最好将django-allauth base.html文件复制到已定义的TEMPLATE_DIRS位置,将其重命名为allauthbase.html,然后通过{% extends "allauthbase.html" %}来扩展您的模板以包含它,而不是使用默认基础。
或者,您可以将子文件夹添加到模板位置,例如project/template/allauth,将所有base.html放置在其中,然后使用{% extends "allauth/base.html" %}

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。它现在是多余的。
完成!

真的。当时我不理解这些东西。 - gatlanticus

2
所有提供的答案都要求你重新编写文件并修改你自己的项目以适应allauth,这是完全不可接受的工作流程。这样一个第三方应用程序不应该对你自己的项目具有如此操纵力。
实际上,特别是根据提供的答案,处理这种情况最简单的方法就是将allauth应用程序及其相关应用程序移动到INSTALLED_APPS列表中的末尾,在settings.py文件中。Django会在找到其他位于其下面的应用程序中的base.html模板之前找到你的base.html模板。
问题解决了。

1

django-allauth 模板似乎扩展了 account/base.html (example),而该模板又扩展了 base.html

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

现在 django auth 模板将扩展您的 account/base.html,该模板将是 django-allauthbase.html

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

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

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接