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