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实现得到一个给定类的虚函数
Sep 28 Python
python获取本机外网ip的方法
Apr 15 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
numpy自动生成数组详解
Dec 15 Python
代码分析Python地图坐标转换
Feb 08 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
python 魔法函数实例及解析
Sep 25 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python如何实现爬取B站视频
May 20 Python
Python实现曲线拟合的最小二乘法
Feb 19 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
Python基础之getpass模块详细介绍
2017/08/10 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
房产转让协议书
2014/04/11 职场文书
学雷锋标语
2014/06/25 职场文书
财务管理专业自荐书
2014/09/02 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
公司员工辞职信范文
2015/05/12 职场文书
2015年除四害工作总结
2015/07/23 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
学习心理学心得体会
2016/01/22 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python
ubuntu下常用apt命令介绍
2022/06/05 Servers
字节飞书面试promise.all实现示例
2022/06/16 Javascript