免责声明我是首席开发人员django-crispy-forms(提到的应用程序之一) https://github.com/maraujop/django-crispy-forms/.
我将尝试解释如何使用 django-crispy-forms 来做到这一点。您只需在模板中执行以下操作:
{% load crispy_forms_tags %}
{{ form|crispy }}
您可以在以下位置看到此内容以及更多内容django-crispy-forms 文档 http://django-crispy-forms.readthedocs.org/en/d-0/index.html。您的 ChoiceField 将根据您的需要呈现为 Bootstrap 下拉列表。
与 django-bootstrap 相比
首先,了解一点历史。 django-bootstrap 诞生于 django-uni-form(django-crispy-forms 的父项目)之后。当时,django-uni-form 已经在做 Boostrap 表单,但可能不是最好的方式(Bootstrap 是通过使用附加的 contrib 应用程序来支持的)。因此,django-bootstrap 的作者可能决定自己开发。
现在,关于 Bootstrap 支持。 django-bootstrap 也可以渲染表单,但是它不使用 Django 过滤器,而是更改表单的基类。因此 django-crispy-forms 影响你的模板,而 django-bootstrap 影响你的 Python 代码。
此外,django-crispy-forms 和 django-bootstrap 都可以让你进行布局。在 django-bootstrap 中,布局位于表单内的 Meta 类中,而在 django-crispy-forms 中,布局位于表单的子类中FormHelper
,这给你解耦。
django-bootstrap 使用元组来定义布局,而 Crispy-forms 使用的子类Layout
。这增加了重用布局、轻松组合布局等的可能性。请注意,虽然 crispy 的封装内部仍然有一个字段列表,但它添加了一个有用且人性化的 API 来以编程方式操作布局,我认为强制执行了良好的解耦模式。
据我所知,脆皮形式的布局更强大。它具有更大的布局对象集合,例如,已经支持前置文本、附加文本、日期范围等,而在 django-boostrap 中,这些对象位于 TODO 列表中。
Crispy-forms 还有一个 API,用于随时修改布局并进行一些硬核编程布局构建,这非常好。
Cripy-forms 还支持各种格式集。它支持不同的CSS模板包,这意味着如果将来新的踢CSS包被命名为“巧克力”,那么为其创建新的模板包将非常容易,并且您的所有表单都将能够使用“巧克力'无需更改代码,只需一个简单的设置变量。
脆皮形式也有属性 http://django-crispy-forms.readthedocs.org/en/d-0/tags.html#helper-attributes-you-can-set你可以设置FormHelper
定义了您可以轻松打开和关闭的额外功能。如果需要,您还可以创建自己的自定义属性。
最后,django-crispy-forms(与 django-uni-form 一起)拥有超过 67.000 次下载,这对于 Django 应用程序来说相当不错。该项目在 Github 上有近 500 名关注者、几个大用户、良好的测试覆盖率和多年的历史,并且仍在积极维护。
与 django-bootstrap-form 相比
据我所知 django-bootstrap-form 只是一个用于使用 Bootstrap 渲染表单的过滤器。这是 django-crispy-form 所涵盖的内容,同时提供了更多、更多的功能。该项目于 2012 年 8 月 21 日发布,在我看来它像是在重新发明轮子,因为其他几个应用程序已经涵盖了这个用例。
与 django-bootstrap-toolkit 相比
它的灵感来自 django-boostrap-form。从我在文档中看到的,它还为您提供了一个用于使用 Bootstrap 渲染表单的过滤器。它显然涵盖了比表单更多的 Bootstrap 内容,但我在其文档中找不到更多信息。上次提交是 2 个月前。
我会坚持认为,我显然不是进行无偏见比较的合适人选。这就是为什么我以前从未写过这个问题。我本来可以多次发表有关此问题的博客文章,但我总是驳回这个想法。然而,随着表单应用程序(和引导支持应用程序)的碎片化不断增加,我认为这可能是写下我的想法的好时机。