加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何将两个视图和两个表单合并为一个模板?

发布时间:2020-12-20 12:04:49 所属栏目:Python 来源:网络整理
导读:我有两个单独的基于类的视图,并希望保持其功能,并让两个CBV指向同一个模板(我试图将两个单独的表单放入一个页面). 更具体地说,我正在尝试子类化/组合this email view和这个password change view,以便我可以让它们指向同一个模板,因为我最终希望两个表单在同
我有两个单独的基于类的视图,并希望保持其功能,并让两个CBV指向同一个模板(我试图将两个单独的表单放入一个页面).

更具体地说,我正在尝试子类化/组合this email view和这个password change view,以便我可以让它们指向同一个模板,因为我最终希望两个表单在同一页面上.

我试图通过将它们子类化到我自己的视图中来做到这一点:

class MyEmailUpdateView(LoginRequiredMixin,EmailView):
    template_name = 'account/account_settings'
    success_url = reverse_lazy('settings')

    def form_valid(self,form):
        return super(SettingsUpdateView,self).form_valid(form)

class MyPasswordUpdateView(LoginRequiredMixin,PasswordChangeView):
    template_name = 'account/account_settings'
    success_url = reverse_lazy('settings')

    def form_valid(self,self).form_valid(form)

但我现在发现由于错误,一个接一个地说,除非我手动将它传入(success_url,方法等),否则父类中的任何内容实际上都没有转移到我的自定义类.即便如此,我正在子类化的原始类中的代码也指向其他地方.
那么,当组合这两个视图时,我是否需要将所有原始代码复制到我的自定义子类视图中?

这是实现它的正确方法吗?我如何结合这两个视图?我最终想找到一种方法,在我自己的应用程序中将它们的两个表单放在一个页面上.是否有可能使用library’s provided templates更简单的方法来实现这一目标?

解决方法

我想你可以使用django中的默认类来实现相同的结果.
据我所知,我得到了这样的场景我们有两个django表单,我们需要它在同一个模板中使用,如果这是我们可以使用来自django.contrib.auth.views的LoginView的场景,它有几个可自定义的选项,如你可以给这样的附加表格

class LoginUserView(LoginView):
    authentication_form = LoginForm
    extra_context = {"register_form": RegistrationForm}
    template_name = 'accounts/index.html'

它将使用get context数据方法来更新您将能够在模板中获得的表单并相应地使用.如果您不希望使用这样的代码,您仍然可以像这样使用它

class MyEmailUpdateView(LoginRequiredMixin,EmailView):
    form_class = EmailForm
    template_name = 'account/account_settings'
    success_url = reverse_lazy('settings')

    def get_context_data(self,**kwargs):
        context = super(MyEmailUpdateView,self).get_context_data(**kwargs)
        context['password_reset_form']  = ResetPasswordForm
        return context

    def form_valid(self,form):
        return super(MyEmailUpdateView,self).form_valid(form)

然后,您可以根据您的要求处理有效的表格.如果您需要任何其他要求,希望有助于取回.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读