我一直试图让django-allauth工作几天,我终于知道发生了什么。
该应用程序不会加载使用django-allauth安装的base.html
模板,而是加载我用于其余网站的base.html
文件。
如何告诉django-allauth使用virtualenv/lib/python2.7/sitepackages/django-allauth
目录中的base.html模板而不是project/template
目录?
答案 0 :(得分:7)
除非直接调用,否则base.html
是您定义的模板的扩展名。
例如,如果您呈现名为Page.html
的模板 - 在顶部,您将拥有{% extends "base.html" %}
。
如上所述,base.html
位于您在settings.py
下TEMPLATE_DIRS = ()
下定义的路径中 - 根据您的说明,该路径定义为project/template
。
最好的办法是将django-allauth base.html
文件复制到定义的TEMPLATE_DIRS
位置,将其重命名为allauthbase.html
,然后扩展模板以包含它而不是默认基础通过{% extends "allauthbase.html" %}
。
或者,您可以将子文件夹添加到模板位置,例如project/template/allauth
,将allauth base.html
放在那里,然后使用{% extends "allauth/base.html" %}
。
答案 1 :(得分:3)
两年后,这仍然是个问题,接受的答案是缺少一些新信息。
在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
。它现在是多余的。完成!
答案 2 :(得分:1)
django-allauth
模板似乎扩展了account/base.html
(example),扩展了base.html
。
因此请将base.html
复制到例如myapp/templates/account/base.html
,并确保myapp
在django-allauth
之前加载(将其放在INSTALLED_APPS
中更高)。
现在,django身份验证模板将扩展您的account/base.html
,django-allauth
base.html
。
这并不完美,因为django-allauth
的{{1}}可能会更新,而您会错过这些更新。但它似乎比重命名所有导入或更改base.html
代码更好。
请注意,您也可以在django-allauth
内围绕内容添加{% block content %}
,然后base.html
将使用该样式,这在许多情况下似乎都是好事。< / p>
答案 3 :(得分:1)
Allauth
尝试扩展myproject/templates/base.html
。最简单的方法是将base.html
移至myproject/templates/site/
以获取myproject/templates/site/base.html
或简单地重命名base.html
答案 4 :(得分:1)
提供的所有答案都迫使您重写文件并修改您自己的项目以适合allauth,这是完全不可接受的工作流程。这样的第三方应用程序不应具有对您自己的项目的操纵能力。
确实,处理这种情况的最简单方法(尤其是根据所提供的答案)是将allauth应用及其关联的应用简单地移动到INSTALLED_APPS
文件中settings.py
列表的末尾。 Django将在其下面列出的其他应用中找到您的base.html
模板,然后再找到另一个base.html
模板。
问题解决了。
答案 5 :(得分:1)
我遇到了相反的问题:我试图使用自己的base.html
文件,但是我的Django项目正在获取django-allauth
的{{1}}版本。事实证明,您在base.html
中定义INSTALLED_APPS
的顺序会影响模板的呈现方式。为了使我 settings.py
而不是base.html
中定义的那个呈现,我需要定义django-allauth
如下:
INSTALLED_APPS