跳转到主要内容

在模板中调整表单字段渲染,而不是在Python级别的表单定义中。

项目描述

Jazzband PyPI Version GitHub Actions Coverage

在模板中调整表单字段渲染,而不是在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',
]

用法

此应用程序提供两套工具,可以一起使用或独立使用。

  1. 一个用于使用类似HTML的语法的render_field模板标签来自定义表单字段。

  2. 用于自定义表单字段HTML属性和CSS类的几个模板过滤器

《span class="docutils literal">render_field

模板过滤器比《span class="docutils literal">render_field

render_field

这是一个可以作为上述过滤器替代的模板标签。这个模板标签使用类似于纯HTML属性的语法渲染字段。

示例

{% 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}" %}

对于使用《span class="docutils literal">{% render_field %}WIDGET_ERROR_CLASS 和 《span class="docutils literal">WIDGET_REQUIRED_CLASS 模板变量来设置错误类和必填字段类。

{% with WIDGET_ERROR_CLASS='my_error' WIDGET_REQUIRED_CLASS='my_required' %}
    {% render_field form.field1 %}
    {% render_field form.field2 %}
    {% render_field form.field3 %}
{% endwith %}

你可以用这些变量发挥创意:例如,一个上下文处理器可以为《span class="docutils literal">{% render_field %}

attr

为表单字段添加或替换任何单个HTML属性。

示例

{% 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

向字段元素添加CSS类。通过空格分隔类以一次添加多个类。

示例

{% load widget_tweaks %}

<!-- add 2 extra css classes to field element -->
{{ form.title|add_class:"css_class_1 css_class_2" }}

set_data

设置HTML5数据属性(http://ejohn.org/blog/html-5-data-attributes/)。对于无障碍JavaScript很有用。这只是一个将属性名以“data-”字符串开头的“attr”过滤器的快捷方式。

示例

{% 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" }}

“add_class”过滤器是“append_attr”过滤器的快捷方式,它向“class”属性添加值。

remove_attr

从表单字段中删除任何单个HTML属性。

示例

{% load widget_tweaks %}

<!-- removes autofocus attribute from field element -->
{{ form.title|remove_attr:"autofocus" }}

add_label_class

与《cite>add_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

与“add_class”相同,但如果字段验证失败(field.errors不为空),则仅添加CSS类。

示例

{% load widget_tweaks %}

<!-- add 'error-border' css class on field error -->
{{ form.title|add_error_class:"error-border" }}

add_error_attr

与“attr”相同,但如果字段验证失败(field.errors不为空),则仅设置属性。这在处理无障碍性时可能很有用。

{% load widget_tweaks %}

<!-- add aria-invalid="true" attribute on field error -->
{{ form.title|add_error_attr:"aria-invalid:true" }}

add_required_class

与“add_error_class”相同,但仅向必填字段添加CSS类。

示例

{% load widget_tweaks %}

<!-- add 'is-required' css class on field required -->
{{ form.title|add_required_class:"is-required" }}

field_type 和 widget_type

《span class="docutils literal">'field_type' 和 《span class="docutils literal">'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_CLASSWIDGET_REQUIRED_CLASS模板变量,这些变量会影响{% render_field %}

1.2 (2013-03-23)

  • 新的add_error_attr模板过滤器;

  • 测试改进。

1.1.2 (2012-06-06)

  • render_field标签中的template变量支持添加到

  • 新的field_typewidget_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 (14.8 kB 查看散列)

上传时间

构建分发

django_widget_tweaks-1.5.0-py3-none-any.whl (9.0 kB 查看哈希值)

上传时间 Python 3

由以下支持