我正在使用Django 1.10,并想在我的网站上添加allauth的应用程序以进行登录、注册等操作。我已经通过pip安装了allauth,并尝试将来自allauth存储库的模板放入我的templates文件夹中并调用它们,但我不知道如何使其工作。
我正在使用Django 1.10,并想在我的网站上添加allauth的应用程序以进行登录、注册等操作。我已经通过pip安装了allauth,并尝试将来自allauth存储库的模板放入我的templates文件夹中并调用它们,但我不知道如何使其工作。
正确的答案可以在这里找到:https://dev59.com/-GMk5IYBdhLWcg3w-Spm#31282443
yourproject/templates/allauth/account/
目录,并将需要编辑的所有模板从/myproject/Lib/site-packages/allauth/templates/account
复制到此处。如果您需要更改socialaccount
模板,请同时创建yourproject/templates/allauth/socialaccount/
settings.py
中编辑'DIRS'
,例如:'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates', 'allauth')],
最终应该看起来像这样:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates', 'allauth')],
'APP_DIRS': True,
'OPTIONS': {
'debug': False,
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.media',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
/Lib/site-packages/*
目录下进行任何代码更改,因为一旦包更新,所有更改都会丢失。yourproject/templates/allauth/account/
复制到/myproject/Lib/site-packages/allauth/account
,或者将os.path.join(BASE_DIR,'templates','allauth')
更改为os.path.join(BASE_DIR,'templates','allauth','templates')
。希望这可以帮助到您。 - pravintemplate\allauth\account
文件夹下时,为什么要将allauth
添加到您的'DIRS'
中?如果使用os.path.join(BASE_DIR,'templates')
,那不是已经包括所有子文件夹了吗?参见https://dev59.com/U2ox5IYBdhLWcg3wGwlo#9571112 - dangel这在我使用Django 2.1.7和django-allauth 0.39.1时有效:
在文件夹yourapp/templates/
下创建一个名为account
的文件夹,最终目录结构是yourapp/templates/account/
,并添加你想要覆盖的所有模板,如login.html
或signup.html
。
在settings.py
中,我的模板目录保持不变:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'yourappname', 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
看起来这个模块的文档已经过时了。对于Django 1.10,您应该执行以下操作:
'django.contrib.sites', # first place
'allauth', # after your modules declarations
'allauth.account',
'allauth.socialaccount',
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend', ) SITE_ID = 1 ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_USERNAME_REQUIRED = True
似乎在django 1.10下不需要修改TEMPLATES部分(django-allauth == 0.28.0)。您可以使用“pip freeze”命令验证模块版本。
创建一个人工模块来覆盖模板;例如,我的项目名为irj_app,我添加了一个名为_shared的新应用程序,然后我有以下结构,并将其添加到' allauth '声明之前的INSTALLED_APPS中:
irj_app / _shared
irj_app / _shared / templates / base.html
irj_app / _shared / templates / account / base.html
irj_app / _shared / templates / account / signup.html
irj_app / _shared / templates / _shared / adminlte-template / ...(其他模块的模板)
希望这有所帮助
像许多人已经在这里说过的那样,我们所要做的就是将allauth模板文件夹中的account、openid和socialaccount文件夹复制到我们项目文件夹的模板文件夹中。
但是,在添加
'DIRS': [os.path.join(BASE_DIR, 'project_name','templates')]
到设置中时,需要注意的一点是,django中的BASE_DIR指向manage.py所在的目录。而正是在这个级别上,我们有我们的项目文件夹和项目中的模板文件夹。因此,我们需要使用os.path.join将'project_name'和'templates'添加到DIRS中。
我使用django 3.0.4和django-allauth 0.41.0
在您的项目目录中添加文件夹templates
。
在文件夹templates
中添加另一个文件夹,名称为app_name
。对于模板login.html
,您需要创建一个名为accounts
的文件夹。
因此,完整路径将是
/project_name/templates/accounts/login.html
我的settings.py
中的模板目录保持不变
'DIRS': [os.path.join(BASE_DIR, 'templates')]
Allauth模板可以像普通的模板覆盖方法一样进行覆盖。
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,'templates'), os.path.join(BASE_DIR,'templates'))
您的模板目录将在项目目录中。进入您的模板目录并创建一个名为allauth的目录,在allauth内创建一个模板目录,在其中创建一个名为accounts的目录
创建与allauth模板同名的html文件。有关模板名称的更多信息,请参阅allauth github repository。
好的,我刚刚成功做到了。
我不知道这些模板在哪里,但我发现,在我的情况下(我正在使用虚拟环境):
Envs/myproject/Lib/site-packages/allauth/templates
我修改了base.html文件,并将我的静态文件夹与所有的Bootstrap和jQuery添加到文件设置中:
app_settings.py
并添加了这个。
...
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
就是这样了。
我不知道这是否是正确的方法,但如果有更好的答案,请发表。
Lib/site-packages
目录中的模板:如果您升级了包,您的更改将被覆盖。这也会使跟踪您的更改或打包您的修改变得非常困难。正确的方法是将模板复制到 templates/allauth/
,并将其添加到设置中的 TEMPLATES
的 DIRS
选项中,如其他答案所指定的那样。 - MichielB