如何渲染Django forms.ChoiceField作为Twitter Bootstrap下拉列表

时间:2012-07-31 22:19:20

标签: django django-forms twitter-bootstrap django-crispy-forms

使用django-bootstrap,django-bootstrap-form,django-bootstrap-之一渲染Django forms.ChoiceField作为Twitter Bootstrap下拉列表的最有效方式(在编程/维护工作方面,优雅方面)是什么?工具包,django-crispy-forms等应用程序?在任何这些应用程序中是否明确支持此用例?

1 个答案:

答案 0 :(得分:62)

免责声明我是django-crispy-forms的主要开发者(提及的应用之一)。

我将尝试用django-crispy-forms解释你是如何做到这一点的。您只需在模板中执行操作:

{% 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表单,但可能不是最好的方式(使用aditional contrib应用程序支持Bootstrap)。因此,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,并进行一些非常好的硬核编程布局构建。

crispy-forms还支持各种formset。它支持不同的CSS模板包,这意味着如果将来新推出的CSS包被命名为'chocolate',那么为它创建一个新的模板包将非常容易,并且所有表单都可以使用'巧克力'没有代码更改,只是一个简单的设置变量。

crispy-form还有attributes你可以设置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个月前。


我会坚持认为我显然不是一个没有偏见的比较的合适人选。这就是为什么我以前从未写过这个。我本可以多次发表关于此的博客文章,但我总是驳斥这个想法。然而,随着表单应用程序(和引导程序支持应用程序)的碎片化不断增长,我认为这可能是写下我的想法的好时机。我希望这有助于Django的新人。

干杯, 米格尔