web-dev-qa-db-ja.com

レンダリングする方法Django forms.ChoiceField as Twitter Bootstrap dropdown

Django forms.ChoiceField as a Twitter Bootstrapドロップダウンのいずれかを使用して、(プログラミング/メンテナンス作業、エレガンスの観点から)最も効率的な方法は何ですか? Django-bootstrap、Django-bootstrap-form、Django-bootstrap-toolkit、Django-crispy-formsなどのアプリ?これらのアプリのいずれかでこのユースケースの明示的なサポートはありますか?

27
Boris D.

免責事項私はDjango-crispy-forms(言及されたアプリの1つ)の主任開発者です。

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フォームを実行していましたが、おそらく最善の方法ではありませんでした(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もあります。これは非常に便利です。

crispy-formsは、あらゆる種類のフォームセットもサポートします。さまざまなCSSテンプレートパックをサポートしています。つまり、将来、新しいキックCSSパックの名前が「chocolate」になった場合、新しいテンプレートパックを簡単に作成でき、すべてのフォームを「」でレンダリングできるようになります。コードを変更せず、単純な設定変数である「chocolate」。

crispy-formsには attributesFormHelperで設定でき、簡単にオンとオフを切り替えることができる優れた追加機能を定義します。必要に応じて、独自のカスタム属性を作成することもできます。

最後に、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の初心者に役立つことを願っています。

乾杯、ミゲル

62
maraujop