django表单的Widgets

不要将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>

原文地址:https://www.cnblogs.com/navysummer/p/10200240.html

时间: 2024-10-09 20:57:32

django表单的Widgets的相关文章

7Python全栈之路系列之Django表单

Python全栈之路系列之Django表单 从Request对象中获取数据 HttpRequest对象包含当前请求URL的一些信息: 熟悉/方法 描述 例如 request.path 除域名以外的请求路径 /hello/ request.get_host() 访问的域名 127.0.0.1:8000" or www.example.com request.get_full_path() 请求路径,可能包含查询字符串 /hello/?print=true request.is_secure() 是

Django表单处理

我们会从手工打造一个简单的搜索页面开始,看看怎样处理浏览器提交而来的数据.然后我们开始使用Django的forms框架. 搜索 在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务.几乎每个网站都有很大的比例访问量来自这两个搜索引擎.甚至,一个网站是否成功取决于其站内搜索的质量.因此,在我们这个网站添加搜索功能看起来好一些. 开始,在URLconf (mysite.urls)添加搜索视图.添加类似(r'^search/$','mysit

django表单使用forms.ModelForm

win7 python2.7 django 1.6.5 因为使用数据库sqlite,项目中有models.py,所以使用方便的forms.ModelForm处理表单. 上传图像文件使用默认的defaultstorage. 1.settings.py里增加两行media的定义: #Media MEDIA_ROOT = 'e:/Depot/media' MEDIA_URL = '/media/' 2.models.py #coding: utf8 from django.db import mode

Django表单——概述

参考文献: https://docs.djangoproject.com/zh-hans/2.0/topics/forms/ HTML 表单 一个表单必须明确两个要素: where: 应返回与用户输入相对应的数据的URL how:应该返回数据的HTTP方法 GET和POST GET和POST是处理表单时唯一使用的HTTP方法. 使用POST方法返回Django的登录表单,其中浏览器捆绑表单数据,对其进行编码以进行传输,将其发送到服务器,然后接收其响应. 相反,GET将提交的数据捆绑成一个字符串,

关于创建Django表单Forms继承BaseForm的问题

在创建Django表单时,因为需要验证用户输入的验证码是否正确,因此需要在session里提取当前验证码的值和POST提交过来的值进行比对,如图: 1 form.py 2 3 from django import forms 4 5 class LoginForms(forms.Form): 6 check_code = forms.CharField() 7 def clean_check_code(self): 8 if self.request.session.get('CheckCode

Django表单API详解

声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑定,则无法进行验证(因为没有数据可以验证!),但它仍然可以以HTML形式呈现空白表单. 表单类原型:class Form[source] 若要创建一个未绑定的Form实例,只需简单地实例化该类: f = ContactForm() 若要绑定数据到表单,可以将数据以字典的形式传递给Form类的构造函数

[py]django表单

参考 django form的作用 1.生成html标签 2.验证输入内容 form生成表单 zhuji/forms.py - 实例化表单 - 定制form错误信息 - 定制表单类型 from django import forms class UserInfo(forms.Form): user_type_choice = ( (0, u'普通用户'), (1, u'高级用户'), ) user_type = forms.IntegerField(widget=forms.widgets.Se

Django表单上传

任务描述:实现表单提交(上传文件) 1.项目目录: 2.源代码: regist.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>regist</title> </head> <body> <h3>regist</h3> <hr> <

Django 表单

学习参考:http://www.runoob.com/django/django-form.html HTTP 请求 HTTP协议以"请求-回复"的方式工作.客户发送请求时,可以在请求中附加数据.服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务. GET 方法 我们在之前项目的C:\Users\XCC\HelloWorld\HelloWorld路径下创建一个 search.py 文件,用于接收用户的请求: # -*- coding: utf-8 -*- fro