我已经尝试了几天让django-allauth工作,最终找到了问题所在。
这个应用程序没有加载随django-allauth一起安装的base.html
模板,而是加载我网站其余部分使用的base.html
文件。
我如何告诉django-allauth使用位于virtualenv/lib/python2.7/sitepackages/django-allauth
目录中的base.html模板,而不是我的project/template
目录?
我已经尝试了几天让django-allauth工作,最终找到了问题所在。
这个应用程序没有加载随django-allauth一起安装的base.html
模板,而是加载我网站其余部分使用的base.html
文件。
我如何告诉django-allauth使用位于virtualenv/lib/python2.7/sitepackages/django-allauth
目录中的base.html模板,而不是我的project/template
目录?
我遇到了相反的问题:我试图使用自己的 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'),
]
base.html
是您定义的模板的扩展。Page.html
的模板-在顶部,您将有{% extends "base.html" %}
。base.html
位于您在settings.py
中定义的路径中,在那里您在TEMPLATE_DIRS =()
下定义了项目/模板。base.html
文件复制到已定义的TEMPLATE_DIRS
位置,将其重命名为allauthbase.html
,然后通过{% extends "allauthbase.html" %}
来扩展您的模板以包含它,而不是使用默认基础。project/template/allauth
,将所有base.html
放置在其中,然后使用{% extends "allauth/base.html" %}
。virtualenv/lib/python2.7/sitepackages/django-allauth/templates
中,复制base.html
的所有内容,替换account/base.html
中的所有内容(即替换{% extends 'base.html' %}
语句)base.html
。它现在是多余的。INSTALLED_APPS
列表中的末尾,在settings.py
文件中。Django会在找到其他位于其下面的应用程序中的base.html
模板之前找到你的base.html
模板。django-allauth
模板似乎扩展了 account/base.html
(example),而该模板又扩展了 base.html
。
因此,将 base.html
复制到例如 myapp/templates/account/base.html
,并确保 myapp
在 INSTALLED_APPS
中加载在 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