尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
django-crispy-forms 版本历史完全指南:2.0 破坏性变更、兼容性矩阵与源码级验证
后端【免费下载链接】django-crispy-formsThe best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.项目地址https://gitcode.com/gh_mirrors/dj/django-crispy-forms点击查看免费下载本文基于仓库中的 CHANGELOG.md 整理 django-crispy-forms 从 django-uni-form 0.7.0 到当前 2.6 版本的完整演进脉络重点拆解 2.0a1 的破坏性变更与迁移方案并结合 pyproject.toml、crispy_forms/utils.py、crispy_forms/layout.py 等源码印证每个版本变更的实际落地形态。读完本文你可以准确判断项目应升级到的版本区间、如何处理 2.0 的 API 断裂并知道在仓库中用哪些测试与配置来验证某一版本的行为。一、CHANGELOG 总览三个阶段与当前版本CHANGELOG.md 记录了项目从django-uni-form时代到如今的完整历史可以划分为三个阶段django-uni-form 时代0.7.0–0.9.0项目最初名为 django-uni-form围绕 uni-form 规范实现 Django 表单的 DRY 渲染django-crispy-forms 1.x 时代1.0.0–1.14.01.0.0 完成项目更名与品牌迁移1.x 阶段的核心工作是模板包template pack体系化与 Bootstrap 3/4 模板包的迭代2.x 时代2.0–Next Release2.0 将 Bootstrap 模板包从核心剥离为独立发行包是一次架构级的收缩与重构。当前仓库的版本号定义在 crispy_forms/init.py 中__version__ 2.6CHANGELOG.md 顶部还预留了未发布版本条目Next Release (TBC)其中确认了Django 6.1的支持这与 pyproject.toml 中的 classifiersFramework :: Django :: 5.2 / 6.0 / 6.1一致。二、完整版本列表2.x 时代2.0 – Next Release版本发布日期核心变更Next Release (TBC)未定确认支持 Django 6.12.62026-03-01移除对 Django 4.2、5.0、5.1 的支持2.52025-11-06确认支持 Python 3.14、Django 6.0移除 Python 3.82.42025-04-13新增 Python 3.13 支持确认 Django 5.22.32024-07-19修复AccordionGroup渲染时被错误添加activeCSS 类的 bug2.22024-06-15支持 Django 5.1渲染Fieldset布局对象时允许传递上下文2.12023-10-15支持 Django 5.0、Python 3.12移除 Django 3.2/4.0/4.1 与 Python 3.72.02023-02-13正式发布相比 2.0a1 无新变更2.0a12023-01-18重大破坏性变更详见下节1.x 时代1.0.0 – 1.14.0版本发布日期核心变更1.14.02022-01-22支持 Python 3.10移除 Django 3.1、Python 3.6新增 bootstrap modal 布局对象FieldWithButtons增加input_size参数1.13.02021-09-25支持 Django 4.01.12.02021-06-11修复 Bootstrap 4 模板包中分组 checkbox/radio 渲染AppendedText/PrependedText/PrependedAppendedText引入input_size参数确认 Django 3.2移除 Python 3.5、Django 3.01.11.22021-03-16增加 HTML 解析工具以辅助模板包测试修复 file 字段全部 widget 属性的渲染1.11.12021-02-21为 prepended/appended 字段内的 select 组件添加custom-select类1.11.02021-01-30Bootstrap 4 模板包 Select 组件启用custom-select修复AccordionGroup的data-parent1.10.02020-11-18修复某些场景下的SystemCheckErrorBootstrap 4 中 Radio/Checkbox 开始尊重字段的disabled属性1.9.22020-07-11修复 FileField UI bug1.9.12020-05-16为 clearable file widget 添加 Bootstrap 4 样式项目测试改用 GitHub Actions1.9.02020-02-28移除 Python 2 支持移除 Django 2.2 以下版本支持Bootstrap 4 中Column的 CSS 改为col-md1.8.12019-11-22修复 1.8.0 引入的 FileField 回归与 radio 的is-valid类问题多项 Bootstrap 4 对齐与间距修复1.8.02019-10-17按 Django 官方支持策略对齐 Django 1.11/2.1/2.2/3.0Bootstrap 4 模板包趋于成熟Custom Forms、form-row、checkbox/radio 层级修复1.7.22018-03-091.7.1 之后的 bug 修复1.7.12018-03-05发布 Bootstrap 4 模板包1.7.02017-10-17修复与 Django 2.0 的兼容性1.6.12016-10-17更新对 Django 1.10 的兼容性若干 Bootstrap 4 小修复1.6.02016-01-07修复 Django 1.9 兼容移除 Django 1.7加入 Bootstrap 4 模板包1.5.22015-09-10修复清理模板上下文时的KeyError: wrapper_class修复 Bootstrap 3 堆叠 checkbox/radio 对齐1.5.12015-08-21测试体系切换到 py.test启用 tox、代码覆盖与 Travis CILayoutObject与BaseInputs支持自定义模板1.5.02015-08-16模板包体系大重构bootstrap3成为默认模板包CRISPY_TEMPLATE_PACK变为可选项详见下文1.4.02013-09-01新增bootstrap3模板包支持 inline 与 horizontal 表单update_attributes支持按字段名工作重构测试架构1.3.22013-06-23修复|crispy过滤器不渲染 label 的问题1.3.12013-06-17修复FormHelper未定义时form_show_labels的默认值1.3.02013-06-16新增CRISPY_ALLOWED_TEMPLATE_PACKS、{% crispy_addon %}标签、FormHelper.template与field_template属性、form_show_labelsTab/TabHolder从layout.py移入bootstrap.py实现 Python 3 兼容1.2.82013-05-10修复KeepContext在 Jingo/Jinja2 下的问题1.2.72013-05-06修复 model formset/inline formset 配合 Layout 渲染时隐藏管理字段丢失、导致无法保存的问题新增render_hidden_fields属性1.2.62013-05-01修复影响类变量 helper 的Container/TabHolderbug1.2.52013-04-25修复动态布局 API 在字段后传参的包装问题LayoutSlice移入独立模块layout_slice1.2.42013-04-13Field新增wrapper_class新增Accordion/AccordionGroupflatatt改为内部实现支持>INSTALLED_APPS ( django.contrib.auth, django.contrib.sessions, django.contrib.contenttypes, django.contrib.admin, crispy_forms, tests, crispy_bootstrap3, crispy_bootstrap4, )同时设置默认模板包tests/test_settings.pyCRISPY_TEMPLATE_PACK bootstrap3值得注意的是1.5.0 起模板包就是自包含的——不能跨模板包引用模板见 docs/template_packs.rst 的说明2.0 只是把这一边界从包内推到了发行包之间。3.2 通过 CRISPY_CLASS_CONVERTERS 恢复 uni-form 类名uni-form模板包被移除后过去会自动附加到各类模板包的 uni-form 专属类名如textInput也随之消失。若项目依赖这些类名可在 settings 中配置CRISPY_CLASS_CONVERTERS恢复旧行为CRISPY_CLASS_CONVERTERS { textinput: textinput textInput, fileinput: fileinput fileUpload, passwordinput: textinput textInput, }这一设置的读取点在 crispy_forms/templatetags/crispy_forms_field.py#L98converters getattr(settings, CRISPY_CLASS_CONVERTERS, {})官方文档 docs/crispy_tag_forms.rst#L213-L215 解释了其用途CharField默认生成input classtextinput ...而 uni-form 需要textInput大写 I因此 crispy-forms 默认保留为input classtextinput textInput...接入新的 CSS 框架或企业自研框架时可用该字典自定义转换规则。仓库测试中的实际取值是CRISPY_CLASS_CONVERTERS {textinput: textinput textInput inputtext}tests/test_settings.py#L24。3.3 form_style 参数移除BREAKINGuni-form模板包支持default或inline两种渲染布局随其移除相关参数被整体删除FormHelper的form_style属性移除render_field()的form_style位置参数移除所有LayoutObject的render()方法的form_style位置参数移除。因此需要对项目中的render()/render_field()调用做审计典型改法# django-crispy-forms 1.x html my_layout_object.render(form, form_style, context) # django-crispy-forms 2.x html my_layout_object.render(form, context)源码可以印证当前签名render_field(field, form, context, templateNone, labelclassNone, ...)crispy_forms/utils.py#L29-L40以及各布局对象的def render(self, form, context, template_packTEMPLATE_PACK, **kwargs)如 crispy_forms/layout.py#L140、crispy_forms/bootstrap.py#L306均无form_style参数。3.4 移除模板中的 |safe安全默认值收紧2.0 移除了 crispy-forms 模板中广泛使用的|safe过滤器。这意味着表单中的 HTML 输入尤其是Field以及 Prepended/Appended 文本默认不再被原样输出。若要保留旧行为需在项目代码中显式使用 Django 的mark_safe()标记文本。变更说明中关联了安全相关的 issue #296——这与 0.9.0 时代修复的 XSS bug错误消息不做safe渲染一脉相承项目整体趋势是让输出默认转义、把信任 HTML的决定权交回开发者。3.5 其他 API 变更附源码印证FormActions.flat_attrs()方法移除**kwargs现在在__init__()阶段一次性经flatatt转换为flat_attrs而不是每次render()时处理。见 crispy_forms/bootstrap.py#L299-L304def __init__(self, *fields, css_idNone, css_classNone, templateNone, **kwargs): self.fields list(fields) self.id css_id self.css_class css_class self.template template or self.template self.flat_attrs flatatt(kwargs)FormActions新增css_id关键字参数为渲染出的div添加id即上面的self.id css_idcrispy_forms/bootstrap.py#L301。FormHelper.html5_required属性移除理由是所有受支持的 Django 版本中核心forms模块已原生提供required属性。仓库测试 tests/test_form_helper.py#L91-L104 中仍保留了test_html5_required其中django.VERSION (1, 10)的分支恰好说明了该属性存在的历史背景。form_error_title/formset_error_title默认值由None改为当前类属性定义见 crispy_forms/helper.py#L191-L192渲染上下文时经.strip()输出crispy_forms/helper.py#L310-L316。CRISPY_TEMPLATE_PACK未提供时抛出 AttributeError从源码结构看crispy_forms/utils.py#L15-L19 中get_template_pack()直接getattr(settings, CRISPY_TEMPLATE_PACK)并包装为SimpleLazyObject可推断当设置缺失时错误会在首次惰性访问模板包名称时以AttributeError形式暴露而不是静默使用某个默认值1.5.0 起该设置是可选的但 2.0 之后不再提供兜底。get_layout_objects()/get_field_names()返回值结构变更由列表的列表改为Pointer对象列表。Pointer是一个 dataclass包含positions路径位置列表与name对象/字段名定义见 crispy_forms/layout.py#L12-L15dataclass class Pointer: positions: list[int] name: strget_field_names()的文档字符串示例crispy_forms/layout.py#L52-L62展示了返回形态例如Pointer([0,1,2], field_name1)表示字段位于第 0 个子布局的第 1 个子布局的第 2 个位置。测试断言可直接验证此结构如 tests/test_dynamic_api.py#L150 的assert layout_1.get_layout_objects(Div) [Pointer([0], div)]。版本兼容移除 Django 2.2 支持新增 Django 4.1、4.2 与 Python 3.11 支持。四、1.x 时代的关键变更结合源码理解4.1 1.0.0从 django-uni-form 到 django-crispy-forms1.0.0 完成了项目迁移与更名标签、过滤器、模块全部重命名附迁移说明并确立了两项影响深远的设计Field布局对象可在其中包装字段名、设置任意属性或覆盖 widget 模板以及严格布局渲染——只渲染布局中声明的字段若表单带Meta.fields/exclude则遵循 Django 标准。另新增form_show_errorshelper 属性控制form.errors的渲染。4.2 1.5.0模板包体系大重构1.5.0 是 1.x 中工程层面影响最大的版本变更点包括模板包自包含化模板包之间移除了危险的交叉引用若维护自定义模板包可能遇到向后不兼容docs/template_packs.rst 有完整说明FormHelper新增template_pack属性可在表单 helper 级别指定模板包改变了布局对象render的行为仓库测试 tests/test_form_helper.py#L108 中form.helper.template_pack bootstrap3即此用法的示例默认模板包改为bootstrap3且CRISPY_TEMPLATE_PACK变为可选项MultiField不再适用于bootstrap/bootstrap3模板包其他修复表单统一渲染{{ form.media }}含Media的 widget 可用、AccordionGroup首组可设activeFalse、AppendedPrependedText被PrependedAppendedText取代等。模板包如何被解析可以从 crispy_forms/utils.py#L15-L26 看到TEMPLATE_PACK惰性取自 settingsdefault_field_template()用lru_cache缓存%s/field.html % template_pack的模板加载避免每次render_field都重新取模板——这也是模板包名称即模板命名空间这一设计的落点。4.3 1.6.0–1.8.0Bootstrap 4 模板包的成熟之路1.6.0加入 Bootstrap 4 模板包同时修复 Django 1.9 兼容、移除 Django 1.71.7.1正式发布 Bootstrap 4 模板包1.8.0后被认为成熟。1.8.0 对自定义模板使用者有三点需要注意改用 Bootstrap 4 的 Custom Forms 渲染 radio/checkbox可通过FormHelper.use_custom_control False关闭用form-row类替代row类修复 checkbox/radio 中 label 与 input 的布局层级。4.4 1.11–1.14细节打磨与新布局对象1.11.0Bootstrap 4 的 Select 组件启用custom-select修复AccordionGroup的data-parentdata-parent是 Bootstrap 折叠面板定位父容器的关键属性1.12.0AppendedText/PrependedText/PrependedAppendedText引入input_size参数可调整 Bootstrap 4 中这类分组输入的尺寸1.14.0新增 bootstrapmodal布局对象FieldWithButtons增加input_size参数。Modal 布局对象在当前源码中的形态见 crispy_forms/bootstrap.py#L1102-L1130默认模板%s/layout/modal.htmlcss_id默认modal_id、title默认Modal Title并在flat_attrs中自动注入tabindex-1、roledialog、aria-labelledby等无障碍属性**AccordionGroup 的active修复2.3 版本**在源码中同样有清晰对应AccordionGroup.__init__记录_active_originally_included active is not Nonecrispy_forms/bootstrap.py#L601-L607父容器通过ContainerHolder.open_target_group_for_form()决定哪个分组默认展开优先展开含错误的分组除非首组被显式设为activeFalse见 crispy_forms/bootstrap.py#L656-L669。五、Python / Django 兼容性矩阵以下矩阵由 CHANGELOG.md 的兼容性声明与当前仓库的 pyproject.toml 交叉整理。适用前提各版本支持关系以发布时的 changelog 声明为准requires-python/依赖下限以发布物元数据为准。版本PythonDjango当前仓库2.6 / Next Release3.10–3.14requires-python 3.105.2–6.1dependencies [django5.2]2.63.10–3.145.2–6.0移除 4.2/5.0/5.12.53.9–3.14确认 3.14移除 3.85.2/6.0确认 6.02.43.9–3.13新增 3.135.2确认2.13.8–3.124.1–5.0移除 3.2/4.0/4.1新增 5.02.0a13.7 至 3.113.2–4.2移除 2.2新增 4.1/4.21.14.03.6 移除后3.10 新增移除 3.1 后1.12.0移除 3.5移除 3.0确认 3.21.9.0移除 Python 2移除 2.2 以下1.3.0实现 Python 3 兼容移除 2.5—要点如果你仍在使用 Django 4.2/5.0/5.1则不能升级到 2.6最高应停留在 2.5 之前声明支持的版本区间若使用 Python 3.14 或 Django 6.x则必须使用 2.56.1 需等待 Next Release 落地。六、在仓库中验证版本行为CHANGELOG 中声明的每一项行为都可以通过仓库内的测试与配置进行验证测试配置tests/test_settings.py 声明了当前生效的CRISPY_TEMPLATE_PACK、CRISPY_CLASS_CONVERTERS与独立模板包应用crispy_bootstrap3/crispy_bootstrap4pyproject.toml 的[tool.pytest.ini_options]将DJANGO_SETTINGS_MODULE指向tests.test_settings因此可直接用 pytest 运行测试套件依赖见 requirements/testing.txt、requirements/dev.txt2.0 迁移点验证Pointer 返回结构可用 tests/test_dynamic_api.py 中的大量assert ... [Pointer([...], ...)]断言核对FormHelper默认值与form_error_title行为见 tests/test_form_helper.py布局对象渲染行为Fieldset在 2.2 中渲染时允许传递上下文对应 crispy_forms/layout.py#L577-L587 的render()实现——legend 通过Template(str(self.legend)).render(context)做模板渲染fieldset/legend/fields一并注入上下文后交给模板包模板因此 legend 中可以写Data for {{ user.username }}这类上下文变量渲染输出快照tests/results/ 目录保存了各渲染场景的期望 HTML如test_formset_layout.html、test_render_hidden_fields.html可用来比对 2.x 渲染管线对 formset、隐藏字段等场景的实际输出。综合来看django-crispy-forms 的演进史可以概括为uni-form 时代建立表单渲染内核1.x 时代把模板包做成可插拔架构并在 Bootstrap 3/4 上打磨成熟2.0 则把渲染核心与具体 CSS 框架解耦——核心只保留布局对象、helper 与渲染管线样式交给独立模板包。理解这条主线就能把 CHANGELOG.md 中每一处Added/Removed/Fixed都放到正确的位置上。赞分享后端【免费下载链接】django-crispy-formsThe best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.项目地址https://gitcode.com/gh_mirrors/dj/django-crispy-forms点击查看免费下载相关推荐从入门到精通Nodepay-Bot高级用户的挖矿策略与优化技巧从入门到精通Nodepay Bot高级用户的挖矿策略与优化技巧 Nodepay Bot是一款专为nodepay.ai平台设计的自动化挖矿工具支持多账户管理、JetCache 与 Spring 生态兼容性指南版本矩阵、破坏性变更与升级避坑手册JetCache 与 Spring 生态兼容性指南版本矩阵、破坏性变更与升级避坑手册 导读 JetCache 是阿里巴巴开源的 Java 缓存框架其注解式缓后端缓存抽象VictoriaMetrics vmanomaly 版本迁移完全指南dryRun 预检、状态兼容性矩阵与配置破坏性变更VictoriaMetrics vmanomaly 版本迁移完全指南dryRun 预检、状态兼容性矩阵与配置破坏性变更 导读 本文围绕 VictoriaMet时序数据库数据库指标监控可观测性后端上一篇Matter NXP 平台实战Thread Border RouterOTBR的配置、管理与二次组网下一篇Compound Engineering33 项技能让 AI 编码代理拥有记忆力的工程插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Decepticon 中间件插件开发实战:基于 decepticon-example-middleware 掌握 SDK 脚手架、入口点注册与框架装配

Decepticon 中间件插件开发实战:基于 decepticon-example-middleware 掌握 SDK 脚手架、入口点注册与框架装配

【免费下载链接】Decepticon Autonomous Hacking Agent for Red Team 项目地址: https://gitcode.com/gh_mirrors/de/Decepticon 点击查看 免费下载 Decepticon 是面向红队场景的自主攻击 Agent 框架,其插件体系允许在不修改开源主代码的前提下&#xf…

📅 2026/10/13 9:28:06
红外小目标检测实战:YOLOv5预训练权重与4000张数据集快速上手

红外小目标检测实战:YOLOv5预训练权重与4000张数据集快速上手

简介:本资源面向红外场景下的目标检测学习者与研究者,提供一套可直接复用的YOLOv5红外微小无人机、直升机、飞机、飞鸟检测方案,解决红外小目标样本稀缺、标注与训练环境搭建繁琐的问题。包内包含4000余张YOLO格式红外图像数据集,…

📅 2026/10/13 9:28:06
coremltools Palettization 技术全解析:权重聚类查找表压缩的原理、粒度控制与三套算法实战

coremltools Palettization 技术全解析:权重聚类查找表压缩的原理、粒度控制与三套算法实战

AI 应用机器学习模型优化 【免费下载链接】coremltools Core ML tools contain supporting tools for Core ML model conversion, editing, and validation. 项目地址: https://gitcode.com/gh_mirrors/co/coremltools 点击查看 免费下载 Palettization&#xff08…

📅 2026/10/13 9:28:06
MORE NEWS

更多资讯

📰

英辰朗迪AI获客每日AI精选(2026.10.04)

一、技术前沿第1条:Anthropic 下一代旗舰 Fable 5.5 被发现灰度测试核心内容:多家开发者在 10 月 2 日前后发现 Claude 网页端被悄然路由至一个未官宣的新后台,回答风格、速度与能力明显区别于 Fable 5.1,外界按其版本节奏称之为「…

📰

计算机网络篇4:socket 编程接口与 sockaddr 通用结构的设计

📚 本文收录于「流浪」的系列专栏 🐧 Linux系统⚙️ C📊 数据结构与算法🐍 Python🔗 LangChain & LangGraph🗄️ MySQL 数据库🌿 Git 工具🌐 计算机网络🤖 LLM&…

📰

MP4本地能播放网页为什么还要等

MP4在本地能打开,放到网页上却要等很久才有画面。只查编码格式容易走偏。本地播放器面对的是已经拿到的文件。网页播放器还要等待所需的字节到达。我这轮把同一段海浪做成普通MP4的头部索引版和尾部索引版,再改变服务器是否支持按范围读取。画面的编码没…

📰

桂花鸡头米炖桃胶:食材清单、炖煮避坑与适饮人群

又是一年鸡头米上市季。这颗被苏州人捧在手心的小圆粒,煮两分钟撒糖桂花就是经典吃法;而它的进阶版——桂花鸡头米炖桃胶,这两年成了很多家庭的秋日固定甜品。这篇按清单整理食材、坑点和适合人群,供参考。食材清单(一…

📰

开源轻量级工业物联网平台UNIHH-IOT:设备数据采集与可视化实战

年底帮一家中型制造企业做产线数据化改造,折腾了几个月,最大的感触是:市面上能用的物联网平台,要么贵得离谱,要么重得吓人。商用平台按点位收费,一个车间几十台设备一年下来就是一笔不小的开支;…

📰

基于STM32单片机直流无刷电机PID控制温度PWM调速编码器蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S457

STM32-S457-无刷电机测速编码器温度超速高温报警PID控制PWM10档加减速正反转电源OLED屏声光提醒按键(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、OLED屏、(无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选)、电压转…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬