文件名称:改进这个简单的表单处理示例-libmodbus源码解析
文件大小:7.37MB
文件格式:PDF
更新时间:2024-07-14 01:47:16
6.3改进这个简单的表单处理示例 与前面几章一样,我展示的是最简可用的方法。现在,我要指出一些问题,并说明如何改进。首先, search()视图对空查询的处理不完美,我们只是显示“Please submit a search term.”消息,用户必须点击浏览器 的后退按钮。 这样做不友好,而且显得不专业,这样的实现会再次经由 Django 处理。遇到这种情况时,重新显示表单,并 且在上部显示错误更好,这样用户可以立即再试一次。为此,最简单的方法是再次渲染模板,如下所示: from django.http import HttpResponse from django.shortcuts import render from books.models import Book def search_form(request): return render(request, 'search_form.html') def search(request): if 'q' in request.GET and request.GET['q']: q = request.GET['q'] books = Book.objects.filter(title__icontains=q) return render(request, 'search_results.html', {'books': books, 'query': q}) else: return render(request, 'search_form.html', {'error': True}) (注意,我还列出了 search_form(),以便让你对比两个视图。)我们改进了 search()视图,在查询词条为 空时再次渲染 search_form.html模板。因为需要在模板中显示错误消息,所以我们还传入了一个模板变量。 现在,我们可以编辑 search_form.html,检查 error变量:
Please submit a search term.
{% endif %} 我们可以继续使用 search_form()视图,因为它没有把 error变量传给模板,所以不会显示错误消息。这样 修改之后,我们的应用程序变得更好了,但是我们不禁要问:真的有必要专门编写一个 search_form()视图 吗? 按照现在的处理方式,对 /search/的请求(没有 GET参数)会显示空的表单(没有错误)。只要我们修改 search()视图,在直接访问 /search/时(没有 GET参数)隐藏错误消息,就可以把 search_form()视图及对 应的 URL 模式删除: 88 - 第 6 章 Django 表单