覆盖 django-allauth 的默认模板

Posted

技术标签:

【中文标题】覆盖 django-allauth 的默认模板【英文标题】:overriding default templates of django-allauth 【发布时间】:2012-03-15 07:18:07 【问题描述】:

我将这个社会注册/注册库django allauth 用于我的一个项目。如何自定义默认模板和表单以提供更好的外观和感觉?

【问题讨论】:

查看这个详细易懂的答案***.com/a/62773971/8260949 【参考方案1】:

假设您已使用 TEMPLATE_DIRS 设置设置了项目级模板目录,例如:

TEMPLATE_DIRS = [
    os.path.join(PROJECT_DIR, 'templates'),
]

您应该能够将显示的所有文件夹here 复制到该目录并根据需要进行编辑。大多数模板似乎都在填充% block content % 块,因此如果您的site_base.html 模板在某处定义了该块,这可能是最简单的。

如果您还没有设置TEMPLATE_DIRS,您可以执行相同的操作,但将模板文件夹复制到您的一个应用程序的templates 目录中。我更喜欢设置TEMPLATE_DIRS 并保留像base.html 这样的主站点模板,因为它们并不真正属于特定的应用程序,但这实际上只是一种偏好;模板加载器应该可以找到它们。

【讨论】:

在当前版本中,您似乎应该有一个base.html(仍然是% block content%)。 TEMPLATE_DIRS 已弃用,是模板docs.djangoproject.com/en/1.8/ref/templates/upgrading 的一部分。将模板/任何东西复制到包中是不好的做法,以后会伤害你。【参考方案2】:

github 上最新版本的 all-auth 有它的模板,但是 Pypi 上没有,你需要做的就是在你的项目目录中克隆 repo 并覆盖模板。就如此容易。

【讨论】:

克隆存储库被认为是一种非常糟糕的做法。 @Red 你能详细说明一下吗? 他可能的意思是,在本地克隆 repo 意味着更难以跟上最新的 all-auth 更新。【参考方案3】:

在你看来:

from allauth.account.views import SignupView, LoginView


class MySignupView(SignupView):
    template_name = 'my_signup.html'


class MyLoginView(LoginView):
    template_name = 'my_login.html'

请注意构建您自己的模板的示例和文档。

在示例模板中观看此片段:

<form id="signup_form" method="post" action="% url 'account_signup' %">

我必须删除 URL 链接才能使其在我自己的模板中正常工作:

<form id="signup_form" method="post" action="">'

【讨论】:

确保您的 URL 指向这些替换视图。 这是我对 allauth 覆盖模板的最简单的解决方案。【参考方案4】:

使用与overriding admin templates相同的逻辑。

【讨论】:

无论链接是指向 1.9 还是 1.10 文档,阅读“在此管理目录中,创建以您的应用命名的子目录”令人惊叹。在你的“应用程序”之后命名“目录”,复数,单数?【参考方案5】:

查看example 应用程序;它有一个templates 文件夹,指示必要模板的布局

【讨论】:

我为实现该库所做的工作是在我的模板文件夹中添加了一个 site_base.html,其中包含两个块 % block head_title % % endblock % % block body %% endblock % 【参考方案6】:

所有这些都是很好的建议。

其中大部分应该可以工作。

不过,唯一对我有用的是将我自己的模板包含在“project/app/templates/account/”中,并确保“django-allauth”在 INSTALLED_APPS 中列出 > 我自己的应用程序。

我发现了这个here。

【讨论】:

【参考方案7】:

要在安装 django-allauth 后对其进行自定义,请从 site-packages 复制它并将其粘贴到您的项目应用程序目录中。这样,默认的 allauth 应用程序及其使用的模板将是您项目的 allauth 应用程序中的那些。然后如果你想修改 socialaccountsignup.html 然后去 apps\allauth\templates\socialaccount\signup.html 并修改它在“块内容”标签内编辑:

% block content %
    // your customized html for signup form
% endblock %

希望这会对你有所帮助。

【讨论】:

我认为应该可以。因为首先 django 在应用程序 (apps\my_app\templates\my_app) 中查找模板,然后在项目模板目录 (templates\my_app) 中查找模板,然后转到您的环境站点包。您是否尝试过更改站点包 allauth 模板中的 html? 我不认为复制是个好方法。更好的是git clone 进入项目文件夹而不是复制代码。 复制模板是首选我是我的情况,因为我宁愿只是复制模板而不是用我不需要修改的所有代码克隆 repo

以上是关于覆盖 django-allauth 的默认模板的主要内容,如果未能解决你的问题,请参考以下文章

无法覆盖 django-allauth 模板

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

站点包中缺少 Django-allauth 模板

覆盖 django-allauth 表单域

使用来自 django-allauth 的访问令牌登录 Spotify iOS SDK

如何覆盖后端流体模板?