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

 更新时间:2015年07月17日 17:31:39   投稿:goldensun  
这篇文章主要介绍了改进Django中的表单的简单方法,Django是Python重多人气框架中最著名的一个,需要的朋友可以参考下

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

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

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:

<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。

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。 原先的代码是这样:

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

现在改成这样:

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

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

相关文章

  • 基于Django集成CAS实现流程详解

    基于Django集成CAS实现流程详解

    这篇文章主要介绍了基于Django集成CAS实现流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python中DataFrame中的xs用法

    Python中DataFrame中的xs用法

    本文主要介绍了Python中DataFrame中的xs用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 使用Pytorch构建第一个神经网络模型 附案例实战

    使用Pytorch构建第一个神经网络模型 附案例实战

    这篇文章主要介绍了用Pytorch构建第一个神经网络模型(附案例实战),本文通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Python+drawpad实现CPU监控小程序

    Python+drawpad实现CPU监控小程序

    这篇文章主要为大家详细介绍了如何利用Python+drawpad实现一个简单的CPU监控小程序,文中示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-08-08
  • Flask使用Pyecharts在单个页面展示多个图表的方法

    Flask使用Pyecharts在单个页面展示多个图表的方法

    这篇文章主要介绍了Flask使用Pyecharts在单个页面展示多个图表的方法,在Flask页面展示echarts,主要有两种方法,文中给大家介绍的非常详细,需要的朋友可以参考下
    2019-08-08
  • Python读取mat文件,并保存为pickle格式的方法

    Python读取mat文件,并保存为pickle格式的方法

    今天小编就为大家分享一篇Python读取mat文件,并保存为pickle格式的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 对python借助百度云API对评论进行观点抽取的方法详解

    对python借助百度云API对评论进行观点抽取的方法详解

    今天小编就为大家分享一篇对python借助百度云API对评论进行观点抽取的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python2.7安装图文教程

    python2.7安装图文教程

    这篇文章主要为大家详细介绍了python2.7安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python实现贝叶斯推断的例子

    python实现贝叶斯推断的例子

    本文介绍一个贝叶斯推断的python实现,并展现了基于标量运算的实现和基于numpy的矩阵运算的实现之间的差别,感兴趣的可以了解一下
    2021-09-09
  • Python实现快速排序和插入排序算法及自定义排序的示例

    Python实现快速排序和插入排序算法及自定义排序的示例

    这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
    2016-02-02

最新评论