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解析文件示例
Jan 23 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Python随机读取文件实现实例
May 25 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python实现计算图像RGB均值方式
Jun 04 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
基于Python爬取股票数据过程详解
Oct 21 Python
python 模拟登陆github的示例
Dec 04 Python
Python用Jira库来操作Jira
Dec 28 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
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
CURL状态码列表(详细)
2013/06/27 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php创建多级目录的方法
2015/03/24 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
2015年新农村建设指导员工作总结
2015/07/24 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
python tkinter模块的简单使用
2021/04/07 Python
python3读取文件指定行的三种方法
2021/05/24 Python
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技