使用 FormView django 在 form_valid 中渲染模板而不是 success_url
Posted
技术标签:
【中文标题】使用 FormView django 在 form_valid 中渲染模板而不是 success_url【英文标题】:Render a template instead a success_url in form_valid with FormView django 【发布时间】:2015-08-24 23:06:19 【问题描述】:正如标题所说:我需要在提交表单后渲染一个模板,这个表单是用FormView
处理的,方法是form_valid
。使用post
方法,我可以在提交模板后渲染模板,但也许使用form_valid
,我可以以最干净的方式完成。
我该怎么做?
【问题讨论】:
不,您不需要这样做。重定向到呈现此模板的另一个 url。 @DanielRoseman 谢谢,我已经尝试过了,但没有解决我的问题,因为这个模板只有在用户填写表格时才会显示,如果用户知道该模板的 url 可以访问该模板模板只输入网址 【参考方案1】: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())
【讨论】:
我想知道为什么默认情况下不提供此选项,而您必须使用这种 hacky 方式来实现这一点。我的意思是谁希望他们的用户在没有上下文的情况下直接访问/success/
?谁想为搜索引擎创建忽略规则以跳过此页面?如果您可以简单地呈现成功模板,谁愿意创建另一个视图并向 urlconf 添加另一个 url。为什么这个选项不是默认的,我想我错过了什么以上是关于使用 FormView django 在 form_valid 中渲染模板而不是 success_url的主要内容,如果未能解决你的问题,请参考以下文章
当包含在其他模板中时,Django 通用 FormView 不显示
python Django(极端情况):如何在FormView(CreateView / UpdateView)的form_valid方法中引发表单无效并添加错误消息
Django:如何使用FormView和ajax将对象保存到数据库?