使用FormView django在form_valid中呈现模板而不是success_url

dfr*_*jas 5 django django-forms django-class-based-views

正如标题所说:我需要在提交表单后呈现模板,此表单FormView由方法处理form_valid.使用这种方法post,我可以在提交之后渲染模板,但也许form_valid,我可以用最干净的方式完成.

我该怎么做?

Edw*_*ndo 12

默认实现form_valid是重定向到success_url,你只需要覆盖它来渲染一些页面.这是一个例子.

class ChangePasswordPage(FormView):
    template_name = 'core/password-change.html'
    form_class = PasswordChangeForm

    def form_valid(self, form):
        form.save()
        messages.success(self.request, "Your password is changed")
        return render(self.request, 'core/password-change-success.html', self.get_context_data())
Run Code Online (Sandbox Code Playgroud)

  • 我想知道为什么默认情况下不提供此选项,而您必须使用这种 hacky 方式来实现此目的。我的意思是谁希望他们的用户在没有上下文的情况下直接访问“/ success/”?谁想为搜索引擎创建忽略规则来跳过此页面?如果你可以简单地渲染一个成功模板,谁愿意创建另一个视图并向 urlconf 添加另一个 url。为什么这个选项不是默认的,我想我错过了一些东西 (2认同)