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实现dnspod自动更新dns解析的方法
Feb 14 Python
Python 抓取动态网页内容方案详解
Dec 25 Python
Python fileinput模块使用实例
May 28 Python
python实现线程池的方法
Jun 30 Python
Python多线程爬虫简单示例
Mar 04 Python
带你了解python装饰器
Jun 15 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
python 通过exifread读取照片信息
Dec 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
基于PHP读取csv文件内容的详解
2013/06/18 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
大学生护理专业自荐信
2013/10/03 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
社区综治工作汇报
2014/10/27 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书