呈现Django表单的最有效方式是什么(就编程/维护工作量、优雅而言).使用Django-Bootstrap、Django-Bootstrap-Form、Django-Bootstrap-Toolkit、Django-Cripy-Forms等应用程序之一将ChoiceField作为Twitter Bootstrap下拉菜单?这些应用程序中是否有明确支持此用例的应用程序?

推荐答案

Disclaimer我是Django-CRISPY-FORMS(上面提到的应用程序之一)的首席开发人员.

我将试着解释你是如何用django脆饼来做这件事的.您只需在模板中执行以下操作:

{% load crispy_forms_tags %}
{{ form|crispy }}

你可以在django-crispy-forms docs页中看到这一点,甚至更多.您的ChoiceField将根据需要呈现为 bootstrap 下拉列表.

与Django-Bootstrap相比

首先,我们来回顾一下历史.Django-Bootstrap诞生于Django-uni-form之后(Django-crispy-forms的父项目).当时,Django-uni-form已经在做Boostrap表单了,但可能不是以最好的方式(Bootstrap是通过使用额外的Conrib应用程序来支持的).因此,Django-Bootstrap的作者可能决定自力更生.

现在,关于 bootstrap 支持.django bootstrap也可以呈现表单,但它不使用django过滤器,而是更改表单的基类.因此,django crispy表单会影响模板,而django bootstrap 会影响Python代码.

此外,Django-crispy-forms和Django-bootstrap都允许您进行布局.在Django-bootstrap中,布局位于表单中的Meta类中,而在Django-Cripy-Forms中,布局位于FormHelper个子类中,这将使您解耦.

django bootstrap使用元组定义布局,crispy forms使用Layout子类.这增加了重用布局、轻松组合布局等的可能性.请注意,尽管crispy的封装中仍然有一个字段列表,但它添加了一个有用的、人性化的API,以编程方式操作布局,我认为这强制了一个好的解耦模式.

在我看来,易碎形式的布局更强大.它有一个更大的布局对象集合,例如,在Django-bostrap中,预先添加的文本、附加的文本、日期范围等已经被支持,而这些都在TODO列表中.

CRISPY-Forms也有一个API,可以在移动中修改布局,并进行一些核心的程序化布局构建,这非常好.

CRISPY-FORMS还支持所有类型的表单集.它支持不同的CSS模板包,这意味着如果将来新的Killing CSS包被命名为"chocolatey ",将很容易为它创建一个新的模板包,并且您所有的表单都将能够用"chocolatey "呈现,而无需更改代码,只需一个简单的设置变量即可.

CRISPY-FORMS也有attributes个你可以在FormHelper中设置的,定义了很好的额外功能,你可以很容易地打开和关闭.如果需要,您还可以创建自己的自定义属性.

最后,django-crispy-forms(连同django-uni-form)有超过67.000的下载量,这对于django应用程序来说是相当不错的.这个项目在Github有近500名追随者,几个大用户,良好的测试覆盖率和几年的历史,它仍然在积极维护.

与Django-Bootstrap相比-form

据我所知,Django-Bootstrap-Form只是一个用Bootstrap呈现表单的过滤.这是Django -脆形式涵盖的东西,同时提供了更多,更多.这个项目是在2012年8月21日发布的,在我看来它是在重新发明轮子,因为其他几个应用程序已经涵盖了这个用例.

与Django-Bootstrap相比-toolkit

它的灵感来自django boostrap的形式.从我在文档中看到的内容来看,它还为您提供了一个过滤器,用于使用 bootstrap 呈现表单.它显然涵盖了比表单更多的 bootstrap 内容,但我在它的文档中找不到更多信息.上一次是两个月前.


我会坚持认为,我显然不是进行无偏见比较的合适人选.这就是为什么我以前从来没有写过这方面的文章.关于这一点,我本可以在博客上发表几次,但我总是对这个 idea 不屑一顾.然而,随着表单应用程序(以及支持 bootstrap 的应用程序)的碎片化程度越来越高,我想现在可能是写下我的 idea 的好时机.我希望这对Django 的新来者有帮助.

干杯, 米格尔

Django相关问答推荐

如何在管理页面创建实例时只在ManyToManyField字段中显示超级用户

Django-Values()并按月分组

在Django ORM中引用非主外键

如何在 Django REST Framework API 响应中使用多标签过滤器?

Django rest框架:自定义对象权限不起作用

重建 Dockerfile 后,Django celery 无法从celery导入名称Celery

如何在 Django 中创建一个独特的 slug

Django RESTful API - django-piston vs. django-tastypie

可以在基于 Django 类的视图中设置实例变量吗?

如何使用 select_for_update 在 Django 中获取查询?

Django:使用render或render_to_response时添加响应头

related_name 参数在 Django 模型中没有按预期工作?

django 管理员操作而不 Select 对象

如何在字段集中显示 Django 管理内联模型?

Django:如何将数据保存到 ManyToManyField?

如何在 django 2.0 admin 中使用 allow_tags?

Django 测试 - 在所有测试中修补对象

Django - TypeError - save() 得到了一个意外的关键字参数force_insert

Django 字符串到日期格式

Django ModelForm 覆盖小部件