我正在项目中成功使用 django-allauth。
我想做的是拥有另一组登录/创建帐户页面,但主题不同。 然而,视图的 template_names 由 allauth 视图固定。
例如:
class LoginView(
RedirectAuthenticatedUserMixin, AjaxCapableProcessFormViewMixin, FormView
):
form_class = LoginForm
template_name = "account/login." + app_settings.TEMPLATE_EXTENSION
上面,template_name是固定的。
我考虑过添加 URL 查询参数来影响模板渲染,但查询参数不会跨重定向保留,也不会在 get_context_data() 期间设置的生成的 url 保留。 因此,如果我从主题 A 的登录页面开始,并决定创建一个帐户,那么我最终会进入非 A 主题的“创建帐户页面”(因为创建帐户页面的 URL 会不包括我的查询参数)
因此,“查询参数”的想法似乎是一种非常脆弱的方法。
有什么办法可以实现这个目标吗? (顺便说一句:这是 Django 3.x,不是最新的)。
可能有更好的方法,但现在我所做的:
所以这并不理想(尤其是模板的重复)。 但我想不出其他方法来解决这个问题。
在新视图中也有一些情况,我必须重写 get_context_data 并或多或少地重复反向()查找,这样我就可以指向新的 URL,例如
class AppsumoPasswordResetView(PasswordResetView):
template_name = 'account/appsumo/password_reset.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
login_url = passthrough_next_redirect_url(
self.request, reverse("appsumo_account_login"), self.redirect_field_name
)
context['login_url'] = login_url
return context
上面唯一真正的变化是在reverse()中使用appsumo_account_login。
所以对所有视图都有很多类似的小修改。
所以。有用。不太好(我认为)。