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的setuptools框架下生成egg的教程
Apr 13 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
Python正则表达式常用函数总结
Jun 24 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
python实现朴素贝叶斯分类器
Mar 28 Python
python批量修改图片大小的方法
Jul 24 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
如何用python写一个简单的词法分析器
Dec 18 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
python读取与处理netcdf数据方式
Feb 14 Python
python线性插值解析
Jul 05 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
php读取csv实现csv文件下载功能
2013/12/18 PHP
php中Snoopy类用法实例
2015/06/19 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
js实现图片360度旋转
2017/01/22 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python标准库之collections包的使用教程
2017/04/27 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
python 日期操作类代码
2018/05/05 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
大专生简历的自我评价
2013/11/26 职场文书
家长对老师的评语
2014/04/18 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
单身申明具结书
2015/02/26 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书