如何编辑 django-allauth 默认模板?
Posted
技术标签:
【中文标题】如何编辑 django-allauth 默认模板?【英文标题】:How to edit django-allauth default templates? 【发布时间】:2016-12-24 21:06:02 【问题描述】:我正在使用 Django 1.10,我想将用于登录、登录等的 allauth 应用程序添加到我的网站。我已经从 pip 安装了 allauth,并尝试将 allauth 存储库中的模板放入我的模板文件夹中并调用它们,但我不知道如何使其工作。
【问题讨论】:
How to override template in django-allauth?的可能重复 查看这个详细且易于理解的答案 ***.com/a/62773971/8260949 【参考方案1】:正确答案可以在这里找到:https://***.com/a/31282443/4992248
-
创建
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')
。希望这会有所帮助
@pravin 第一种方式绝对不好 - 在更新 allauth
期间您将丢失所有更改。关于第二种方式-要么您使用非标准路径,要么django
或allauth
的结构已更改(django
我很少使用,allauth
我上次使用一年前)。
@TitakFighter,正如您所说,问题可能是由于一年中不同版本的变化。经历了这里给出的其他几个解决方案以及关于 SO 的其他类似问题。大多数人似乎都尝试过解决方案,但未能成功解决并最终做复杂的事情。然而,该解决方案只是对上述解决方案的一个小调整。这就是评论的原因。谢谢
当您将新模板放在template\allauth\account
文件夹下时,为什么要将allauth
添加到您的'DIRS'
中? os.path.join(BASE_DIR, 'templates')
不会包含所有子文件夹吗?见***.com/a/9571112/895810
@dangel 很久以前了。我记得由于某种原因它在我的情况下不起作用。不幸的是,我不记得这个原因了。【参考方案2】:
模块的文档似乎已经过时了。对于 Django 1.10,您应该执行以下操作:
使用 pip 下载模块 将以下内容添加到 INSTALLED_APPS(/settings.py 文件)'django.contrib.sites', # first place
'allauth', # after your modules declarations
'allauth.account',
'allauth.socialaccount',
添加后端声明和 allauth 所需的其他内容
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 的新应用程序,然后我具有以下结构,并将其添加到 INSTALLED_APPS 之前的 'allauth' 声明:
我在“_shared”文件夹中创建了一个模板目录,并添加了一个名为“base.html”的文件,它覆盖了allauth 模板。我发现 django-allauth 创建了一个模板来覆盖您之前制作的布局,然后您需要拦截 django-allauth 模板以更改此行为。您还可以覆盖此身份验证机制的任何模板。例如我有:
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 / ... (template for other modules)
希望对你有帮助
【讨论】:
请注意,当我不小心有以下目录结构(而不是上面的)irj_app/_shared/templates/allauth/base.html(nb'allauth'目录)时,我无法让上面的工作【参考方案3】:试试这个:
在应用的模板目录中创建 account 目录,使其如下所示
您的应用程序名称/模板/帐户
和文件
yourppname/templates/account/login.html
yourppname/templates/account/signup.html
并将以下内容添加到您的 TEMPLATE DIRS 记得将 yourappname 更改为您的应用名称
os.path.join(BASE_DIR, 'yourappname', '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',
],
,
,
]
【讨论】:
【参考方案4】:这对我使用 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')],
【讨论】:
【参考方案5】:我使用 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')]
django-allauth doc templates
【讨论】:
必须是account
而不是 accounts
【参考方案6】:
Allauth 模板可以像普通模板覆盖方法一样被覆盖。
-
设置模板目录
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,'templates'), os.path.join(BASE_DIR,'templates'))
您的模板目录将位于项目目录中。进入你的模板目录和create a directory named allauth, inside allauth create a template directory and inside that create a directory accounts
创建与 allauth 模板同名的 html 文件。有关模板名称的更多信息,请参阅 allauth github repository。
【讨论】:
它返回我说 TEMPLATE_* 设置已从版本 1.8 弃用【参考方案7】:假设您要自定义登录页面。 不需要更改模板设置 只需在您的项目模板文件夹中创建一个名为 account 的文件夹: 克隆项目在 django-allauth==0.36.0
git clone https://github.com/pennersr/django-allauth
cd django-allauth/allauth/templates/account
将base.html和login.html复制到创建的账号文件夹中
我试过了,效果很好。
Official Link
【讨论】:
【参考方案8】:好吧,我只是能够做到。
我不知道这些模板在哪里,但我发现,就我而言(我使用的是虚拟环境):
Envs/myproject/Lib/site-packages/allauth/templates
我修改了 base.html 并将我的静态文件夹与我所有的引导程序和 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
选项中。以上是关于如何编辑 django-allauth 默认模板?的主要内容,如果未能解决你的问题,请参考以下文章