详解Django的 form_invalid_redirect() 函数:返回表单验证失败后的重定向 URL

yizhihongxing

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

这样在表单验证失败后,页面会跳转到原页面,但是不会展示错误信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 form_invalid_redirect() 函数:返回表单验证失败后的重定向 URL - Python技术站

(0)
上一篇 2023年3月23日
下一篇 2023年3月23日

相关文章

  • 详解Django的 form_invalid_message() 函数:返回表单验证失败后的消息

    form_invalid_message() 函数是 Django 中 FormMixin 类的一个方法,其作用是在表单提交验证失败(即表单内容不合法)时,指定一个自定义错误消息的显示。 使用方法: 重写form_invalid方法,调用form_invalid_message()函数并指定自定义的错误消息。 在模板中,使用 {{ form.non_fiel…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_paginator() 函数:获取分页器

    Django中get_paginator()函数的作用与使用方法 1. get_paginator()函数的作用 Django中的get_paginator()函数是用来进行分页的工具,通过将一系列需要分页的数据传递到该函数中,可以返回一个Paginator对象,该对象包含了分页后的数据以及分页的相关信息,例如总页数、当前页码等。get_paginator(…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 post() 函数:处理 POST 请求

    Django中的post()函数 作用 在Django框架中,post()函数是在HTTP POST请求中使用的一个方法。当用户在表单中提交数据时,post()函数用于处理表单数据。 使用方法 在视图文件中使用post()函数,需要先引入它,示例代码如下: from django.views.decorators.csrf import csrf_exemp…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 create() 函数:创建对象

    当使用Django ORM作为后端数据库操作模块时,create()函数提供了方便的功能能够快速创建并保存一个模型实例。下面将详细讲解create()函数的作用和使用方法,同时提供两个实例进行说明。 作用 create()函数的作用是创建一个新的模型实例,并将其保存至数据库中。 使用方法 create()函数是一个类方法,可以在模型类上直接调用,使用方式如下…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 form_valid() 函数:当表单验证成功时执行的操作

    Django中form_valid()函数的作用与使用方法 在Django中,视图函数中form_valid()函数是一个非常有用的函数。该函数主要用来在表单数据验证成功后处理表单数据。 1. 作用 form_valid()函数的作用是将表单验证成功后的数据传送给视图函数中的其他函数进行处理。借助form_valid()函数,我们可以将表单数据存储到数据库中…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 values_list() 函数:获取指定字段的列表

    Django 的 values_list() 函数用于从 QuerySet 中返回一个列表,该列表包含一个或多个字段的值。这个函数的使用方法如下: values_list(*fields, flat=False, named=False) 该函数有三个参数: *fields: 字段名列表。应该是字符串或关联的字段名列表。或者,可以使用双下划线指定关联的字段。…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 as_view() 函数:将 Django 视图转换为类视图

    1. Django中的as_view()函数 在Django中,我们可以通过as_view()函数将我们的视图转换为可调用对象并返回。as_view()函数的主要作用是将Django中的class-based views(基于类的视图)转换为函数视图,并返回一个由as_view()生成的可调用对象。这个可调用对象 wraps(包装)了实际view()方法,用…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 create_superuser() 函数:创建超级用户

    下面是关于Django create_superuser()函数的详细讲解,希望能够帮到你。 create_superuser()函数简介 create_superuser()函数是Django内置的用于创建超级用户的函数。它可在Django的User模型中创建一个超级用户对象,以便您可以方便地登录到Django后台管理系统。 create_superuse…

    Django函数大全 2023年3月23日
    00
合作推广
合作推广
分享本页
返回顶部