重写 Django-allauth 默认模板

30

我在我的一个项目中使用了这个社交注册/注册库 django allauth。如何自定义默认模板和表单,以使其外观更好、更易于理解?


请查看这个详细且易于理解的答案:https://dev59.com/-GMk5IYBdhLWcg3w-Spm#62773971 - Vivek Singh
7个回答

22

假设您已经使用TEMPLATE_DIRS设置为项目级别的模板目录,例如:

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

您应该能够复制这里显示的所有文件夹到该目录中,并按需进行编辑。大多数模板似乎都在填充{% block content %}块,因此,如果您的site_base.html模板在某个位置定义了该块,那么最简单的方法可能是这样做。

如果您还没有设置TEMPLATE_DIRS,您可以执行同样的操作,但将模板文件夹复制到其中一个应用程序的templates目录中。我更喜欢设置TEMPLATE_DIRS并将主站点模板(如base.html)放在那里,因为它们并不真正属于特定的应用程序,但这只是一种偏好; 模板加载器应该无论哪种方式都能找到它们。


1
在当前版本中,看起来你应该有一个 base.html 文件(仍然包含 {% block content%})。 - Mark
2
TEMPLATE_DIRS已经被弃用,现在是TEMPLATES的一部分。请参考https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/。将模板/anything复制到包中是不良实践,以后会给您带来麻烦。 - Marc

13

在你的看法中:

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指向这些替换视图。 - Adam Starrh
这是我在allauth覆盖模板上拥有的最简单的解决方案。 - keisaac

12

在Github上的最新版本的all-auth模块将其模板文件放在外面,但是在Pypi上的版本没有这样做。你只需要在项目目录中克隆该代码库并覆盖模板即可。就是这么简单。


15
克隆代码库被认为是一种非常不好的做法。 - Red
4
@Red 你能详细说明一下吗? - user
7
他可能的意思是,本地克隆存储库意味着更难跟上对all-auth的进一步更新。 - user75506

9

无论链接是指向1.9还是1.10文档,读到“在此管理目录中,创建以您的应用程序命名的子目录”都感觉很棒。使用“app”的单数形式来命名“directories”的复数形式吗? - Mike O'Connor

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

我为实现库所做的工作是在我的模板文件夹中添加了一个site_base.html,其中有两个块 <!doctype html><head> <title> {% block head_title %} {% endblock %} </title> </head> <body> <!-- done for django-allauth --> {% block body %}{% endblock %} </body> </html> 我该如何编辑或覆盖内置模板?在我的virtualenv中哪个目录里可以找到它们? - user993563
~/.virtualenvs/yourproject/lib/python2.7/site-packages/allauth - boldnik

4

这些都是不错的建议。

大部分应该能够奏效。

但唯一对我有用的方法是在“project/app/templates/account/”中包含自己的模板,并确保在我的应用程序之后将“django-allauth”列入INSTALLED_APPS。

我在这里发现了这个方法:https://dev59.com/-GMk5IYBdhLWcg3w-Spm#18811664


2

安装完django-allauth后,如果想要自定义它,可以将其从site-packages目录复制到项目应用程序目录中。这样,您的项目的allauth应用程序及其模板将成为默认使用的内容。然后,如果您想修改socialaccountsignup.html,请前往apps\allauth\templates\socialaccount\signup.html并在“block content”标签内进行编辑:

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

希望这能帮到你。

我认为它应该可以工作。因为 Django 首先在应用内查找模板 (apps\my_app\templates\my_app),然后在项目模板目录中查找 (templates\my_app),最后再去你的环境 site-packages 中查找。你有尝试过更改 site-packages allauth 模板中的 HTML 吗? - Zubair Afzal
我认为复制并不是一个好的方式。更好的方法是在项目文件夹中使用git clone而不是复制代码。 - boldnik
在我的情况下,复制模板会更好,因为我宁愿只复制模板而不是克隆整个仓库,包括我不需要修改的所有代码。 - Ron E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接