django表单的Widgets使用详解


Posted in Python onJuly 22, 2019

前言

不要将Widget与表单的fields字段混淆。表单字段负责验证输入并直接在模板中使用。而Widget负责渲染网页上HTML表单的输入元素和提取提交的原始数据。widget是字段的一个内在属性,用于定义字段在浏览器的页面里以何种HTML元素展现。

一、指定使用的widget

每个字段都有一个默认的widget类型。如果你想要使用一个不同的Widget,可以在定义字段时使用widget参数。 像这样:

from django import forms

class CommentForm(forms.Form):
  name = forms.CharField()
  url = forms.URLField()
  comment = forms.CharField(widget=forms.Textarea)

这将使用一个Textarea Widget来展现表单的评论字段,而不是默认的TextInput Widget。

二、设置widget的参数

许多widget具有可选的额外参数,下面的示例中,设置了SelectDateWidget的years 属性,注意参数的传递方法:

from django import forms

BIRTH_YEAR_CHOICES = ('1980', '1981', '1982')
FAVORITE_COLORS_CHOICES = (
  ('blue', 'Blue'),
  ('green', 'Green'),
  ('black', 'Black'),
)

class SimpleForm(forms.Form):
  birth_year = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
  favorite_colors = forms.MultipleChoiceField(
    required=False,
    widget=forms.CheckboxSelectMultiple,
    choices=FAVORITE_COLORS_CHOICES,
  )

三、为widget添加CSS样式

默认情况下,当Django渲染Widget为实际的HTML代码时,不会帮你添加任何的CSS样式,也就是说网页上所有的TextInput元素的外观是一样的。

看下面的表单:

from django import forms

class CommentForm(forms.Form):
  name = forms.CharField()
  url = forms.URLField()
  comment = forms.CharField()

这个表单包含三个默认的TextInput Widget,以默认的方式渲染,没有CSS类、没有额外的属性。每个Widget的输入框将渲染得一模一样,丑陋又单调:

>>> f = CommentForm(auto_id=False)
>>> f.as_table()
<tr><th>Name:</th><td><input type="text" name="name" required /></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" required /></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr>

在真正的网页中,你可ending不想让每个Widget看上去都一样。可能想要给comment一个更大的输入框,可能想让‘name' Widget具有一些特殊的CSS类。

可以在创建Widget时使用Widget.attrs参数来实现这一目的:

class CommentForm(forms.Form):
  name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))
  url = forms.URLField()
  comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))

注意参数的传递方式!

这次渲染后的结果就不一样了:

>>> f = CommentForm(auto_id=False)
>>> f.as_table()
<tr><th>Name:</th><td><input type="text" name="name" class="special" required /></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" required /></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" size="40" required /></td></tr>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python设计模式之观察者模式实例
Apr 26 Python
python下MySQLdb用法实例分析
Jun 08 Python
Python中enumerate函数代码解析
Oct 31 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
彻底理解Python中的yield关键字
Apr 01 Python
浅谈python新式类和旧式类区别
Apr 26 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
Python grpc超时机制代码示例
Sep 14 Python
python3读取文件指定行的三种方法
May 24 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 #Python
超简单的Python HTTP服务
Jul 22 #Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 #Python
django框架CSRF防护原理与用法分析
Jul 22 #Python
全面了解django的缓存机制及使用方法
Jul 22 #Python
python logging模块书写日志以及日志分割详解
Jul 22 #Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 #Python
You might like
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
php微信开发之关注事件
2018/06/14 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
20招让你的Python飞起来!
2016/09/27 Python
python实现画一颗树和一片森林
2018/06/25 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python绘制数码晶体管日期
2021/02/19 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
简历中自我评价分享
2013/10/09 职场文书
单位介绍信范文
2014/01/18 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
普宁寺导游词
2015/02/04 职场文书
个人思想政治总结
2015/03/05 职场文书
演讲比赛主持词
2015/06/29 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python