如何修改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 %}

{{ field|attr:"foo:default_foo" }}

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生成表单的样式相关推荐

  1. 很棒的 Django 应用程序、项目和资源的精选表单

    目录 管理界面 分析 资产管理 验证 授权 博客管理 样板 缓存 兼容性 客户关系管理 仪表盘 数据科学 数据库 调试 电子邮件 字段 文件传输 形式 地理信息系统 图像处理 进出口 迁移 移动支持 ...

  2. Java入力项目无法设定到form_html中关于form与表单提交操作的资料集合

    原标题:html中关于form与表单提交操作的资料集合 这里我们介绍一下form元素与表单提交方面的知识. form元素 form元素的DOM接口是HTMLFormElement,继承自HTMLEle ...

  3. 关于form与表单提交

    一个表单里面只要有form元素,如果没有给action加一个默认值,为空白的时候,当你刷新页面时,会弹出一个警告框提示你已经填入表单,刷新数据将会丢失. 如果一个表单里面有一个type="s ...

  4. 关于form与表单提交操作的一切

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 链接:http://caibaojian.com/form.html 来源:http://caibaojian.com 你知道, ...

  5. 前端项目实战175-ant design form清空表单

    form清空表单 const handleClear = (index: any) => {form.setFieldsValue({ [`overlayLength-${index}`]: n ...

  6. form提交表单时本地下载

    form 提交表单时,没有进行跳转页面,而进行的时本地下载,或自动连接你的迅雷下载. 我把这句 contentType="text/html;charset=utf-8" 代码写成 ...

  7. 模拟form提交表单

    表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...

  8. 框架生成的HTML修改,Django框架form表单验证 修改html标签的样式

    经过前面的学习,我们大致可以知道CharField.EmailField等等以Field结尾的方法,只能帮助我们对用户发来的信息做验证,不能生成html标签.字段本身自己虽然只做验证,但是我们可以通过 ...

  9. 没有form的表单验证_PHP动态生成表单,内置17种常用组件并且支持表单验证!

    FormBuilder 是一个开源的PHP表单生成器,可以快速生成现代化的form表单.还可以配合开源项目 xaboy/form-create 生成任何 Vue 组件 github | 文档 环境需求 ...

  10. html表单不允许修改,[问题]如何在表单里定义(form)仅仅可读,不可修改的列?

    经过我不懈努力的寻找及测试,现在有一个解决方案可以解决type='form'表单里设置只读字段.只需要覆写columns中的renderFormItem字段即可.下面以设置用户名只读为例: pro-t ...

最新文章

  1. Velocity文档(3)
  2. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath
  3. 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思
  4. 原声ajax的函数式封装,原生 js 封装 ajax的两种方式(get,post)
  5. python中字符串文件如何打开_python-字符串·文件·集合操作
  6. b树索引 java_B树索引最通俗易懂的介绍
  7. MySQL的mysql_insert_id和LAST_INSERT_ID
  8. 我们真的需要统一的编程规范?
  9. LeetCode 127. 单词接龙(图的BFS/双向BFS)
  10. OpenSSH 远程拒绝服务漏洞
  11. 根据序列选择自回归模型(AR、ARMA、VAR、VMA、VECH)
  12. linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
  13. jmeter下载图片
  14. spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群...
  15. 卡巴斯基安全软件2014(78三年,逢周一68)时间:2013.10.1-2013.10.31
  16. 虚幻4服务端linux,UE4 虚幻4教程 服务端构建后启动错误的解决方法
  17. react —— 解决报错之 Objects are not valid as a React child (found: [object HTMLDivElement]). If you meant
  18. Mac 如何消除系统更新小红点
  19. 达梦DW+DSC环境mal压缩测试
  20. flume1.9 用户指南(中文版)

热门文章

  1. wait,notify,notifyAll用法解析
  2. 【新手速成】菜鸟如何在三天内完成系统开发
  3. Firefox 火狐网址生成二维码扩展推荐
  4. Android图形显示系统——下层显示1:基础知识与相关文件
  5. Android Contentprovider的学习实例总结
  6. RCP程序中集成其他插件的配置方法
  7. Python基础--04
  8. python 命名风格_python 代码风格------------PEP8规则
  9. ES6学习笔记七(Set和Map)
  10. c语言文件归档,Go语言tar归档文件的读写操作