覆盖 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,其中包含两个块所有这些都是很好的建议。
其中大部分应该可以工作。
不过,唯一对我有用的是将我自己的模板包含在“project/app/templates/account/”中,并确保“django-allauth”在 INSTALLED_APPS 中列出 > 我自己的应用程序。
我发现了这个here。
【讨论】:
【参考方案7】:要在安装 django-allauth 后对其进行自定义,请从 site-packages 复制它并将其粘贴到您的项目应用程序目录中。这样,默认的 allauth 应用程序及其使用的模板将是您项目的 allauth 应用程序中的那些。然后如果你想修改 socialaccount 的 signup.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 的默认模板的主要内容,如果未能解决你的问题,请参考以下文章