django.forms生成HTML,如何修改Django Form生成表单的样式
如何修改Django Form生成表单的样式
HIKAI
19 OCT 2017
0 Comments
关于表单样式的修改,有两种方式,前端和后端。后端,可以在定义表单字段时,设定相应widget,比如下面。前端,可以通过django-wddget-tweaks实现。
related = forms.ModelChoiceField(queryset=BlogComment.objects.all(),required=False, widget=forms.HiddenInput)
django-widget-tweaks
第三方django包,用于调整模板渲染后的表单字段样式,而不需要在python-level的表单定义时调整。它支持更改CSS样式表和HTML元素属性。它满足了设计者通过CSS和Javascript定制字段展现的样式,而不用去操作相应的python代码。
安装
pip install django-widget-tweaks
然后在INSTALLED_APPS中添加'widget-tweaks'。
使用
这个应用提供了两组工具,可以一起使用或者单独使用。
1.模板标签render_field,用类似HTML的语法来定制表单字段;
2.一些模板过滤器,用来定制表单字段的HTML属性和CSS样式;
render_field标签应该更容易使用,对于网站设计者和前端开发者来说,更容易去定制表单字段。
相对render_field标签,模板过滤器功能更强大,但是它需要使用或多或少的HTML语法。
render_field
举个例子,
{% load widget_tweaks %}
{% render_field form.search_query type="search" %}
{% render_field form.text rows="20" cols="20" title="Hello, world!" %}
{% render_field form.title class+="css_class_1 css_class_2" %}
{% render_field form.text placeholder=form.text.label %}
可以通过使用WIDGET_ERROR_CLASS和WIDGET_REQUIRED_CLASS模板变量,来设置{%render_field%}渲染的字段的错误和必选的样式表。
{% with WIDGET_ERROR_CLASS='my_error' WIDGET_REQUIRED_CLASS='my_required' %}
{% render_field form.field1 %}
{% render_field form.field2 %}
{% render_field form.field3 %}
{% endwith %}
你可以灵活的使用这些变量:比如,在上下文处理器中对所有通过{%render_field%}渲染的字段设置默认的错误样式表。
过滤器
attr
添加或者替换任何一个表单字段的html属性。
{% load widget_tweaks %}
{{ form.search_query|attr:"type:search" }}
{{ form.text|attr:"rows:20"|attr:"cols:20"|attr:"title:Hello, world!" }}
{{ form.search_query|attr:"autofocus" }}
add_class
给字段元素添加CSS样式。如果一次添加多个样式,通过空格分隔。
{% load widget_tweaks %}
{{ form.title|add_class:"css_class_1 css_class_2" }}
set_data
设置HTML5数据属性(http://ejohn.org/blog/html-5-data-attributes/)。对于javascript非常有用。它是'attr'过滤器的快捷方式,在属性名字前用'data-'字符串装饰。
{% load widget_tweaks %}
{{ form.title|set_data:"filters:OverText" }}
append_attr
给属性值添加额外的数据。
{% load widget_tweaks %}
{{ form.title|append_attr:"class:css_class_1 css_class_2" }}
‘add_class’ filter is just a shortcut for ‘append_attr’ filter that adds values to the ‘class’ attribute.
add_error_class
The same as ‘add_class’ but adds css class only if validation failed for the field (field.errors is not empty).
{% load widget_tweaks %}
{{ form.title|add_error_class:"error-border" }}
add_error_attr
The same as ‘attr’ but sets an attribute only if validation failed for the field (field.errors is not empty). This can be useful when dealing with accessibility:
{% load widget_tweaks %}
{{ form.title|add_error_attr:"aria-invalid:true" }}
field_type and widget_type
'field_type'和'widget_type'是模板过滤器,用来返回字段样式表和字段widget名字。
{% load widget_tweaks %}
{{ field }}
output:
Filter chaining
The order django-widget-tweaks filters apply may seem counter-intuitive (leftmost filter wins):
{{ form.simple|attr:"foo:bar"|attr:"foo:baz" }}
output:
它不是bug,它是一个feature,enables creating reusable templates with overridable defaults.(创建可复用模板覆盖默认值???)。
Reusable field template example:
{# inc/field.html #}
{% load widget_tweaks %}
Example usage:
{# my_template.html #}
{% load widget_tweaks %}
{% csrf_token %}
{% include "inc/field.html" with field=form.title %}
{% include "inc/field.html" with field=form.description|attr:"foo:non_default_foo" %}
With 'rightmost filter wins' rule it wouldn't be possible to override |attr:"foo:default_foo" in main template.
其它:
https://stackoverflow.com/questions/5827590/css-styling-in-django-forms
django.forms生成HTML,如何修改Django Form生成表单的样式相关推荐
- 很棒的 Django 应用程序、项目和资源的精选表单
目录 管理界面 分析 资产管理 验证 授权 博客管理 样板 缓存 兼容性 客户关系管理 仪表盘 数据科学 数据库 调试 电子邮件 字段 文件传输 形式 地理信息系统 图像处理 进出口 迁移 移动支持 ...
- Java入力项目无法设定到form_html中关于form与表单提交操作的资料集合
原标题:html中关于form与表单提交操作的资料集合 这里我们介绍一下form元素与表单提交方面的知识. form元素 form元素的DOM接口是HTMLFormElement,继承自HTMLEle ...
- 关于form与表单提交
一个表单里面只要有form元素,如果没有给action加一个默认值,为空白的时候,当你刷新页面时,会弹出一个警告框提示你已经填入表单,刷新数据将会丢失. 如果一个表单里面有一个type="s ...
- 关于form与表单提交操作的一切
著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 链接:http://caibaojian.com/form.html 来源:http://caibaojian.com 你知道, ...
- 前端项目实战175-ant design form清空表单
form清空表单 const handleClear = (index: any) => {form.setFieldsValue({ [`overlayLength-${index}`]: n ...
- form提交表单时本地下载
form 提交表单时,没有进行跳转页面,而进行的时本地下载,或自动连接你的迅雷下载. 我把这句 contentType="text/html;charset=utf-8" 代码写成 ...
- 模拟form提交表单
表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...
- 框架生成的HTML修改,Django框架form表单验证 修改html标签的样式
经过前面的学习,我们大致可以知道CharField.EmailField等等以Field结尾的方法,只能帮助我们对用户发来的信息做验证,不能生成html标签.字段本身自己虽然只做验证,但是我们可以通过 ...
- 没有form的表单验证_PHP动态生成表单,内置17种常用组件并且支持表单验证!
FormBuilder 是一个开源的PHP表单生成器,可以快速生成现代化的form表单.还可以配合开源项目 xaboy/form-create 生成任何 Vue 组件 github | 文档 环境需求 ...
- html表单不允许修改,[问题]如何在表单里定义(form)仅仅可读,不可修改的列?
经过我不懈努力的寻找及测试,现在有一个解决方案可以解决type='form'表单里设置只读字段.只需要覆写columns中的renderFormItem字段即可.下面以设置用户名只读为例: pro-t ...
最新文章
- Velocity文档(3)
- python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath
- 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思
- 原声ajax的函数式封装,原生 js 封装 ajax的两种方式(get,post)
- python中字符串文件如何打开_python-字符串·文件·集合操作
- b树索引 java_B树索引最通俗易懂的介绍
- MySQL的mysql_insert_id和LAST_INSERT_ID
- 我们真的需要统一的编程规范?
- LeetCode 127. 单词接龙(图的BFS/双向BFS)
- OpenSSH 远程拒绝服务漏洞
- 根据序列选择自回归模型(AR、ARMA、VAR、VMA、VECH)
- linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
- jmeter下载图片
- spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群...
- 卡巴斯基安全软件2014(78三年,逢周一68)时间:2013.10.1-2013.10.31
- 虚幻4服务端linux,UE4 虚幻4教程 服务端构建后启动错误的解决方法
- react —— 解决报错之 Objects are not valid as a React child (found: [object HTMLDivElement]). If you meant
- Mac 如何消除系统更新小红点
- 达梦DW+DSC环境mal压缩测试
- flume1.9 用户指南(中文版)