Подтвердить что ты не робот

Как визуализировать Django forms.ChoiceField в качестве раскрывающегося списка Bootstrap Twitter

Каков наиболее эффективный способ (с точки зрения программирования/обслуживания, элегантности) для создания форм Django.ChoiceField как раскрывающийся список Bootstrap Twitter, используя один из django-bootstrap, django-bootstrap-form, django-bootstrap- инструментарий, django-crispy-forms и т.д. приложения? Является ли явная поддержка этого варианта использования в любом из этих приложений?

4b9b3361

Ответ 1

Отказ от ответственности Я ведущий разработчик django-crispy-forms (один из упомянутых приложений).

Я попытаюсь объяснить, как вы это делаете с django-crispy-forms. Вы просто делаете в своем шаблоне:

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

Вы можете видеть это и многое другое в django-crispy-docs. Ваш ChoiceField будет отображаться как выпадающее меню Bootstrap, как вы хотите.

По сравнению с django-bootstrap

Во-первых, немного истории. django-bootstrap родился после django-uni-form (родительский проект, из которого эволюционировали django-crispy-forms). В то время django-uni-form уже делал формы Boostrap, но, вероятно, не самым лучшим образом (Bootstrap поддерживался с помощью приложения aditional contrib). Таким образом, автор django-bootstrap, вероятно, решил пойти сам по себе.

Теперь, относительно поддержки Bootstrap. django-bootstrap также может отображать формы, но вместо использования фильтра Django он изменяет базовый класс вашей формы. Таким образом, django-crispy-forms влияет на ваши шаблоны, в то время как django-bootstrap влияет на ваш код Python.

Кроме того, как django-crispy-forms, так и django-bootstrap позволяют создавать макеты. В django-bootstrap макеты находятся в мета-классе в форме, а в django-crispy-формах макеты живут в подклассе FormHelper, что дает вам развязку.

django-bootstrap использует кортеж для определения макета, в то время как хрустящие формы используют подкласс Layout. Это добавляет возможность повторного использования макетов, компоновки макетов и т.д. Обратите внимание, что хотя хрустящая инкапсуляция по-прежнему содержит список полей внутри, она добавляет полезный и удобный для пользователя API для программного манипулирования макетом, и я думаю, что это обеспечивает хороший шаблон развязки.

Из того, что я вижу, макеты в хрустящих формах более мощные. Он имеет большую коллекцию объектов макета, например, добавленный текст, добавленный текст, daterange и другие уже поддерживаются, в то время как в django-boostrap они находятся в списке TODO.

crispy-forms также имеет API для изменения макетов на ходу и делает очень сложное программирование, которое очень приятно.

хрустящие формы также поддерживают формы всех видов. Он поддерживает различные шаблоны шаблонов CSS, а это означает, что если в будущем новый пакет CSS для ногами будет назван "шоколад", для него будет очень легко создать новый пакет шаблонов, и все ваши формы будут отображаться с помощью ' шоколад "без изменений кода, просто простая переменная настройки.

crispy-forms также имеет attributes, который вы можете установить в FormHelper, которые определяют хорошую дополнительную функциональность, которую вы можете легко включить и выключить. Вы также можете создать свои собственные настраиваемые атрибуты.

Наконец, django-crispy-forms (вместе с django-uni-form) имеет более 67 000 загрузок, что неплохо для приложения Django. Проект имеет почти 500 подписчиков в Github, несколько крупных пользователей, хорошее тестирование и несколько лет истории, и он по-прежнему активно поддерживается.

По сравнению с django-bootstrap-form

Из того, что я вижу, django-bootstrap-form - это только фильтр для рендеринга формы с Bootstrap. Это что-то вроде django-хрустящей формы, предлагая много, гораздо больше. Проект был выпущен 21 августа 2012 года и выглядит так, как будто он изобретает колесо, потому что некоторые другие приложения уже используют этот вариант использования.

По сравнению с django-bootstrap-toolkit

Это вдохновило django-boostrap-form. Из того, что я вижу в документах, он также дает вам фильтр для рендеринга формы с помощью Bootstrap. По-видимому, он охватывает больше элементов Bootstrap, чем форм, но я не могу найти больше информации в своих документах. Последний коммит был 2 месяца назад.


Я буду настаивать на том, что я, очевидно, не тот человек, для сравнения, который не предвзято. Вот почему я никогда не писал об этом раньше. Я мог бы опубликовать сообщение в блоге об этом несколько раз, но я всегда отвергал эту идею. Однако, поскольку фрагментация приложений формы (и приложений поддержки загрузки) растет, я подумал, что это может быть подходящее время, чтобы записать то, что я думаю. Надеюсь, это поможет новичкам Django.

Cheers, Miguel