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

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

【问题讨论】:

标签: django django-forms django-templates django-formwizard django-allauth


【解决方案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
    猜你喜欢
    • 2016-06-04
    • 2019-08-01
    • 2014-01-05
    • 2019-07-11
    • 2014-08-30
    • 2016-07-29
    • 2013-09-18
    • 2018-06-21
    • 1970-01-01
    相关资源
    最近更新 更多