form_invalid_redirect()
函数是 Django 中 FormMixin 提供的方法,它可以指定在表单验证失败后,应该跳转到哪个页面。
在默认情况下,表单验证失败后,Django 会直接返回原页面,并在页面上呈现错误信息。但是在某些情况下,我们可能需要在表单验证失败后,跳转到指定的页面,或者在跳转到原页面时不呈现错误信息。这时候就需要使用 form_invalid_redirect()
函数了。
form_invalid_redirect()
函数的使用方法非常简单,只需要在视图中定义一个 get_form_invalid_redirect()
函数,该函数返回应该跳转的页面的 URL 即可。如果你希望在跳转后不展示错误信息,可以通过重写 get_context_data()
函数,在上下文中删除 'form'
变量。
下面提供两个示例:
假设我们有一个文章发布页面,页面包含一个 ArticleForm
表单,用户在表单中填写完毕后点击发布按钮。如果表单验证失败,我们希望跳转到文章列表页面,并在列表页面中展示错误信息。
首先,我们需要在视图中定义一个 get_form_invalid_redirect()
函数,该函数返回文章列表页面的 URL。具体操作如下:
class ArticleCreateView(CreateView):
template_name = 'article_create.html'
form_class = ArticleForm
def get_success_url(self):
return reverse('article_list')
def get_form_invalid_redirect(self):
return reverse('article_list')
然后在文章列表页面中展示错误信息的代码如下:
{% if form.errors %}
<div class="alert alert-danger">
<strong>错误</strong>
<ul>
{% for field, errors in form.errors.items %}
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
{% endfor %}
</ul>
</div>
{% endif %}
假设我们有一个评论系统,页面包含一个 CommentForm
表单,用户在表单中填写完毕后点击提交评论按钮。如果表单验证失败,我们希望跳转到原页面,但不展示错误信息。
首先,我们需要在视图中定义一个 get_form_invalid_redirect()
函数,该函数返回当前页面的 URL。具体操作如下:
class CommentCreateView(CreateView):
template_name = 'comment_create.html'
form_class = CommentForm
def get_success_url(self):
return reverse('comment_list')
def get_form_invalid_redirect(self):
return self.request.path
然后在视图中重写 get_context_data()
函数,将 'form'
变量删除。具体代码如下:
class CommentCreateView(CreateView):
template_name = 'comment_create.html'
form_class = CommentForm
def get_success_url(self):
return reverse('comment_list')
def get_form_invalid_redirect(self):
return self.request.path
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
del context['form']
return context
这样在表单验证失败后,页面会跳转到原页面,但是不会展示错误信息。
本文链接:http://task.lmcjl.com/news/16202.html