gpt4 book ai didi

改进Django中的表单的简单方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章改进Django中的表单的简单方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

首先,search()视图对于空字符串的处理相当薄弱——仅显示一条”Please submit a search term.”的提示信息。 若用户要重新填写表单必须自行点击“后退”按钮, 这种做法既糟糕又不专业。如果在现实的案例中,我们这样子编写,那么Django的优势将荡然无存.

在检测到空字符串时更好的解决方法是重新显示表单,并在表单上面给出错误提示以便用户立刻重新填写。 最简单的实现方法既是添加else分句重新显示表单,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.http import HttpResponse
from django.shortcuts import render_to_response
from mysite.books.models import Book
 
def search_form(request):
   return render_to_response( '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_to_response( 'search_results.html' ,
       { 'books' : books, 'query' : q})
   else :
     * * return render_to_response( 'search_form.html' , { 'error' : True }) * *

(注意,将search_form()视图也包含进来以便查看) 。

这段代码里,我们改进来search()视图:在字符串为空时重新显示search_form.html。 并且给这个模板传递了一个变量error,记录着错误提示信息。 现在我们编辑一下search_form.html,检测变量error:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
   <title>Search< / title>
< / head>
<body>
   * * { % if error % } * *
     * * <p style = "color: red;" >Please submit a search term.< / p> * *
   * * { % endif % } * *
   <form action = "/search/" method = "get" >
     < input type = "text" name = "q" >
     < input type = "submit" value = "Search" >
   < / form>
< / body>
< / html>

我们修改了search_form()视图所使用的模板,因为search_form()视图没有传递error变量,所以在条用search_form视图时不会显示错误信息.

通过上面的一些修改,现在程序变的好多了,但是现在出现一个问题: 是否有必要专门编写search_form()来显示表单? 按实际情况来说,当一个请求发送至/search/(未包含GET的数据)后将会显示一个空的表单(带有错误信息)。 所以,只要我们改变search()视图:当用户访问/search/并未提交任何数据时就隐藏错误信息,这样就移去search_form()视图以及对应的URLpattern.

?
1
2
3
4
5
6
7
8
9
10
11
12
def search(request):
   error = False
   if 'q' in request.GET:
     q = request.GET[ 'q' ]
     if not q:
       error = True
     else :
       books = Book.objects. filter (title__icontains = q)
       return render_to_response( 'search_results.html' ,
         { 'books' : books, 'query' : q})
   return render_to_response( 'search_form.html' ,
     { 'error' : error})

在改进后的视图中,若用户访问/search/并且没有带有GET数据,那么他将看到一个没有错误信息的表单; 如果用户提交了一个空表单,那么它将看到错误提示信息,还有表单; 最后,若用户提交了一个非空的值,那么他将看到搜索结果.

最后,我们再稍微改进一下这个表单,去掉冗余的部分。 既然已经将两个视图与URLs合并起来,/search/视图管理着表单的显示以及结果的显示,那么在search_form.html里表单的action值就没有必要硬编码的指定URL。 原先的代码是这样:

?
1
< form action = "/search/" method = "get" >

现在改成这样:

?
1
< form action = "" method = "get" >

action=”“意味着表单将提交给与当前页面相同的URL。 这样修改之后,如果search()视图不指向其它页面的话,你将不必再修改action.

最后此篇关于改进Django中的表单的简单方法的文章就讲到这里了,如果你想了解更多关于改进Django中的表单的简单方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com