如何编辑 django-allauth 默认模板?

How to edit django-allauth default templates?

我正在使用 Django 1.10,我想将 allauth 的应用程序添加到我的网站以进行登录、登录等。我已经从 pip 安装了 allauth,并尝试将 allauth 存储库中的模板放入我的模板文件夹中并调用它们,但我不知道如何让它工作。

Allauth 模板可以像普通模板覆盖方法一样被覆盖。

  1. 设置模板目录

TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), os.path.join(BASE_DIR,'templates'))

  1. 您的模板目录将在项目目录中。进入模板目录并 create a directory named allauth, inside allauth create a template directory and inside that create a directory accounts

  2. 创建 html 个与 allauth 模板同名的文件。有关模板名称的更多信息,请参阅 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"),
]

仅此而已。

我不知道这样做是否正确,但如果有人有更好的答案,请post。

正确答案可以在这里找到:

  1. 创建 yourproject/templates/allauth/account/ 并在此处粘贴您需要从 /myproject/Lib/site-packages/allauth/templates/account 编辑的所有模板。

如果您需要对 socialaccount 模板进行更改,请同时创建 yourproject/templates/allauth/socialaccount/

  1. 'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates', 'allauth')],
  2. 一样编辑 settings.py 中的 'DIRS'

最后看起来应该是这样的:

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',
            ],
        },
    },
]
  1. 您永远不应该在 /Lib/site-packages/* 处进行任何代码更改,因为一旦包更新,所有更改都会丢失。

看来模块的文档已经过时了。对于 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' 声明:

irj_app / _shared

  • 我在“_shared”文件夹中创建了一个模板目录,并且我添加了一个名为 "base.html" 的文件来覆盖 allauth 模板。我发现 django-allauth 创建了一个模板来覆盖您之前所做的布局,然后您需要拦截 django-allauth 模板以更改此行为。您也可以覆盖此身份验证机制的任何模板。例如我有:

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)

希望对您有所帮助

试试这个:

在您应用的模板目录中创建 account 目录,如下所示

yourppname/templates/account

和文件

yourppname/templates/account/login.html

yourppname/templates/account/signup.html

并将以下内容添加到您的模板目录中记得将您的应用名称更改为您应用的名称

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',
        ],
    },
},
]

In django-allauth==0.36.0

  • 假设您想自定义登录页面。
  • 不需要更改模板设置
  • 只需在您的项目模板文件夹中创建一个名为 account 的文件夹,然后:
  • 克隆项目 git clone https://github.com/pennersr/django-allauth cd django-allauth/allauth/templates/account
  • 复制base.html和login.html到创建的账户文件夹
  • 我试过了,有效。

Official Link

使用 Django 2.1.7 和 django-allauth 0.39.1 这对我有用:

  • 在文件夹 yourapp/templates/ 中创建一个名为 account 的文件夹,所以最后的结构是 yourapp/templates/account/ 并添加您想要覆盖的所有模板,例如 login.htmlsignup.html.

  • settings.py 中,我的模板目录保持不变

    'DIRS': [os.path.join(BASE_DIR, 'templates')],

我使用 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

就像这里很多人已经告诉的那样,我们所要做的就是将allauth的templates文件夹中的account,openid和socialaccount文件夹放入我们项目文件夹的templates文件夹中。

但是在添加 时要记住一件事 'DIRS': [os.path.join(BASE_DIR, 'project_name','templates')] 设置是,django中的BASE_DIR指向存放manage.py的目录。正是在这个级别,我们在项目中有我们的项目文件夹和模板文件夹。所以我们需要将我们的 'project_name' 然后 'templates' 添加到 DIRS os.path.join