在模板中调整表单字段渲染,而不是在Python级别的表单定义中。
项目描述
在模板中调整表单字段渲染,而不是在Python级别的表单定义中。支持修改CSS类和HTML属性。
这应该足够设计师自定义字段展示(使用CSS和非侵入式JavaScript)而不需要接触Python代码。
许可证是MIT。
安装
您可以通过pip获得Django Widget Tweaks。
$ pip install django-widget-tweaks
要在项目中启用widget_tweaks,您需要将其添加到项目中的settings.py文件中的INSTALLED_APPS。
INSTALLED_APPS += [
'widget_tweaks',
]
用法
此应用程序提供两套工具,可以一起使用或独立使用。
一个用于使用类似HTML的语法的render_field模板标签来自定义表单字段。
用于自定义表单字段HTML属性和CSS类的几个模板过滤器
《span class="docutils literal">render_field
模板过滤器比《span class="docutils literal">render_field
这是一个可以作为上述过滤器替代的模板标签。这个模板标签使用类似于纯HTML属性的语法渲染字段。 示例 对于使用《span class="docutils literal">{% render_field %}WIDGET_ERROR_CLASS 和 《span class="docutils literal">WIDGET_REQUIRED_CLASS 模板变量来设置错误类和必填字段类。 你可以用这些变量发挥创意:例如,一个上下文处理器可以为《span class="docutils literal">{% render_field %}
为表单字段添加或替换任何单个HTML属性。 示例 向字段元素添加CSS类。通过空格分隔类以一次添加多个类。 示例 设置HTML5数据属性(http://ejohn.org/blog/html-5-data-attributes/)。对于无障碍JavaScript很有用。这只是一个将属性名以“data-”字符串开头的“attr”过滤器的快捷方式。 示例 在额外数据上追加属性值。 示例 “add_class”过滤器是“append_attr”过滤器的快捷方式,它向“class”属性添加值。 从表单字段中删除任何单个HTML属性。 示例 与《cite>add_class
示例 与“add_class”相同,但如果字段验证失败(field.errors不为空),则仅添加CSS类。 示例 与“attr”相同,但如果字段验证失败(field.errors不为空),则仅设置属性。这在处理无障碍性时可能很有用。 与“add_error_class”相同,但仅向必填字段添加CSS类。 示例 《span class="docutils literal">'field_type' 和 《span class="docutils literal">'widget_type' 是模板过滤器,返回字段类名和字段小部件类名(小写)。 示例 输出render_field
{% load widget_tweaks %}
<!-- change input type (e.g. to HTML5) -->
{% render_field form.search_query type="search" %}
<!-- add/change several attributes -->
{% render_field form.text rows="20" cols="20" title="Hello, world!" %}
<!-- append to an attribute -->
{% render_field form.title class+="css_class_1 css_class_2" %}
<!-- template variables can be used as attribute values -->
{% render_field form.text placeholder=form.text.label %}
<!-- double colon -->
{% render_field form.search_query v-bind::class="{active:isActive}" %}
{% with WIDGET_ERROR_CLASS='my_error' WIDGET_REQUIRED_CLASS='my_required' %}
{% render_field form.field1 %}
{% render_field form.field2 %}
{% render_field form.field3 %}
{% endwith %}
attr
{% load widget_tweaks %}
<!-- change input type (e.g. to HTML5) -->
{{ form.search_query|attr:"type:search" }}
<!-- add/change several attributes -->
{{ form.text|attr:"rows:20"|attr:"cols:20"|attr:"title:Hello, world!" }}
<!-- attributes without parameters -->
{{ form.search_query|attr:"autofocus" }}
<!-- attributes with double colon Vuejs output: v-bind:class="{active:ValueEnabled}" -->
{{ form.search_query|attr:"v-bind::class:{active:ValueEnabled}" }}
add_class
{% load widget_tweaks %}
<!-- add 2 extra css classes to field element -->
{{ form.title|add_class:"css_class_1 css_class_2" }}
set_data
{% load widget_tweaks %}
<!-- data-filters:"OverText" will be added to input field -->
{{ form.title|set_data:"filters:OverText" }}
append_attr
{% load widget_tweaks %}
<!-- add 2 extra css classes to field element -->
{{ form.title|append_attr:"class:css_class_1 css_class_2" }}
remove_attr
{% load widget_tweaks %}
<!-- removes autofocus attribute from field element -->
{{ form.title|remove_attr:"autofocus" }}
add_label_class
{% load widget_tweaks %}
<!-- add 2 extra css classes to field label element -->
{{ form.title|add_label_class:"label_class_1 label_class_2" }}
add_error_class
{% load widget_tweaks %}
<!-- add 'error-border' css class on field error -->
{{ form.title|add_error_class:"error-border" }}
add_error_attr
{% load widget_tweaks %}
<!-- add aria-invalid="true" attribute on field error -->
{{ form.title|add_error_attr:"aria-invalid:true" }}
add_required_class
{% load widget_tweaks %}
<!-- add 'is-required' css class on field required -->
{{ form.title|add_required_class:"is-required" }}
field_type 和 widget_type
{% load widget_tweaks %}
<div class=
"field {{ field|field_type }} {{ field|widget_type }} {{ field.html_name }}">
{{ field }}
</div><div class=
"field charfield textinput name">
<input id="id_name" type="text" name="name" maxlength="100" />
</div>
混合 render_field 和过滤器
《span class="docutils literal">render_field
示例
{% render_field form.category|append_attr:"readonly:readonly" type="text" placeholder="Category" %}
返回
<input name="category" placeholder="Profession" readonly="readonly" type="text">
过滤器链
django-widget-tweaks过滤器应用的顺序可能看起来不符合直观(最左边的过滤器获胜)。
{{ form.simple|attr:"foo:bar"|attr:"foo:baz" }}
返回
<input foo="bar" type="text" name="simple" id="id_simple" />
这不是一个错误,而是一个特性,它使得可以创建可重用的模板,并允许覆盖默认值。
可重用字段模板示例
{# inc/field.html #}
{% load widget_tweaks %}
<div>{{ field|attr:"foo:default_foo" }}</div>
示例用法
{# my_template.html #}
{% load widget_tweaks %}
<form method='POST' action=''> {% csrf_token %}
{% include "inc/field.html" with field=form.title %}
{% include "inc/field.html" with field=form.description|attr:"foo:non_default_foo" %}
</form>
根据“最右边的过滤器获胜”规则,无法在主模板中覆盖《span class="docutils literal">|attr:"foo:default_foo"。
贡献
如果你发现了错误,实现了功能或有所建议,请不要犹豫,与我联系,提交一个问题或发送一个拉取请求。
测试
确保你已经安装了 tox,然后键入
tox
从源代码签出。
不支持
MultiWidgets:SplitDateTimeWidget,SplitHiddenDateTimeWidget
更改
1.5.0 (2023-08-25)
添加Django 4.2支持。
添加Django 4.1支持。
删除Django 4.0支持。
删除Django 2.2支持。
添加Python 3.11支持。
删除Python 3.7支持。
1.4.12 (2022-01-13)
将最低要求的Python版本设置为3.7。
添加更好的文档语法高亮。
调整构建设置并停止构建已弃用的通用Python 2轮子。
1.4.11 (2022-01-08)
添加对Django 4.0的支持。
删除对Django 3.0和3.1的支持。
支持Python 3.10
停止支持Python 3.6
1.4.9 (2021-09-02)
支持Django 3.2
迁移到GitHub Actions。
停止支持Django 1.11。
支持Python 3.9。
1.4.8 (2020-03-12)
修复发布版本
1.4.7 (2020-03-10)
修复Travis部署到Jazzband网站
1.4.6 (2020-03-09)
功能:从字段中删除属性
为remove_attr功能添加了文档
使用black重新格式化代码以符合PEP8兼容性
更一致的tox配置
添加新的模板标签,unittest和文档
弃用Python 2.7支持
对所有文件使用自动格式化
1.4.5 (2019-06-08)
修复rST格式化错误。
1.4.4 (2019-06-05)
添加对type属性的 support。
添加Python 3.7并停止Python 3.3支持。
添加对双冒号语法的 support。
1.4.3 (2018-09-6)
为表单标签添加CSS的add_label_class过滤器
删除对不支持Django版本的兼容性代码
修复Django < 1.8中对非值属性的 support。
通过将它们的值设置为True来支持HTML5中的非值属性
1.4.2 (2018-03-19)
更新readme以使安装更清晰
在更新属性之前对字段进行浅拷贝
停止支持Python 2.6和Python 3.2
始终将render的结果转换为字符串
修复django >= 2.0的导入问题
迁移到jazzband
1.4.1 (2015-06-29)
修复django-widget-tweaks v1.4中的回归(字段不再进行深拷贝)。
1.4 (2015-06-27)
Django 1.7、1.8和1.9支持;
setup.py切换到setuptools;
测试改进;
添加Python 3.4 support;
不再支持Python 2.5;
不再支持bitbucket仓库(开发已迁移到github)。
1.3 (2013-04-05)
添加支持WIDGET_ERROR_CLASS和WIDGET_REQUIRED_CLASS模板变量,这些变量会影响{% render_field %}。
1.2 (2013-03-23)
新的add_error_attr模板过滤器;
测试改进。
1.1.2 (2012-06-06)
将render_field标签中的template变量支持添加到
新的field_type和widget_type过滤器。
1.1.1 (2012-03-22)
修复了一些关于render_field标签的问题。
1.1 (2012-03-22)
render_field模板标签。
1.0 (2012-02-06)
如果字段缺失,过滤器返回空字符串而不是抛出异常;
测试运行改进;
支持python 3;
删除了未记录的‘behave’过滤器。
0.3 (2011-03-04)
add_error_class过滤器。
0.2.1 (2011-02-03)
保留在widget中自定义的属性;
不再有额外的空白;
测试;
0.1 (2011-01-12)
初始发布。
项目详情
django_widget_tweaks-1.5.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c2180681ebb994e922c754804c7ffebbe1245014777ac47897a81f57cc629c7 |
|
MD5 | 626f935fe6ea61fa5524d1457325c6a2 |
|
BLAKE2b-256 | a5fe26eb92fba83844e71bbec0ced7fc2e843e5990020e3cc676925204031654 |
django_widget_tweaks-1.5.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a41b7b2f05bd44d673d11ebd6c09a96f1d013ee98121cb98c384fe84e33b881e |
|
MD5 | 7c397ee602bfde7fdf10244a4c81776b |
|
BLAKE2b-256 | 466a6cb6deb5c38b785c77c3ba66f53051eada49205979c407323eb666930915 |