fields - form action django
Cómo representar formularios Django. Campo de opciones como cuenta desplegable de inicio de Twitter (1)
¿Cuál es la forma más eficiente (en términos de esfuerzo de programación / mantenimiento, elegancia) para representar un formulario Django? Opción de Campo como un menú desplegable Bootstrap de Twitter utilizando uno de los kits de herramientas django-bootstrap, django-bootstrap-form, django-bootstrap-toolkit, django ¿Aplicaciones crispy, etc? ¿Hay soporte explícito para este caso de uso en cualquiera de estas aplicaciones?
Descargo de responsabilidad Soy el desarrollador principal de django-crispy-forms (una de las aplicaciones mencionadas).
Intentaré explicar cómo haces esto con django-crispy-forms. Simplemente lo haces en tu plantilla:
{% load crispy_forms_tags %}
{{ form|crispy }}
Puedes ver esto y más en los documentos de django-crispy-forms . Tu ChoiceField se representará como menú desplegable de Bootstrap como quieras.
Comparado con django-bootstrap
Primero, un poco de historia. django-bootstrap nació después de django-uni-form (el proyecto principal a partir del cual evolucionó django-crispy-forms). En ese momento, django-uni-form ya estaba haciendo formularios Boostrap, pero probablemente no de la mejor manera posible (Bootstrap era compatible mediante el uso de una aplicación contrib adicional). Por lo tanto, el autor de django-bootstrap probablemente decidió ir por su cuenta.
Ahora, con respecto a la compatibilidad con Bootstrap. django-bootstrap también puede generar formularios pero, en lugar de usar un filtro Django, cambia la clase base de su formulario. Así que django-crispy-forms afecta sus plantillas, mientras que django-bootstrap afecta su código Python.
Además, tanto django-crispy-forms como django-bootstrap te permiten hacer diseños. En django-bootstrap, los diseños están en una clase Meta dentro del formulario, mientras que en django-crispy-forma los diseños están en vivo en una subclase de FormHelper
, lo que le da desacoplamiento.
django-bootstrap usa una tupla para definir un diseño, mientras que crispy-forms usa una subclase de Layout
. Esto agrega la posibilidad de reutilizar diseños, componer diseños fácilmente, etc. Tenga en cuenta que aunque la encapsulación de crispy todavía tiene una lista de campos dentro, agrega una API útil y amigable para manipular el diseño mediante programación y creo que aplica un buen patrón de desacoplamiento.
Por lo que puedo ver, los diseños en formas crujientes son más potentes. Tiene una colección de objetos de diseño más amplia, por ejemplo, texto prefijado, texto agregado, daterange y otros ya son compatibles, mientras que en django-boostrap estos están en la lista de tareas pendientes.
crispy-forms también tiene una API para modificar diseños sobre la marcha y hacer un diseño de programación programado que es muy bueno.
Las formas crujientes también son compatibles con los conjuntos de formas de todo tipo. Es compatible con diferentes paquetes de plantillas CSS, lo que significa que si en el futuro el nuevo paquete CSS de kicking se llama ''chocolate'', será muy fácil crear un nuevo paquete de plantillas para él y todos sus formularios podrán procesarse con '' chocolate ''sin cambios de código, solo una variable de configuración simple.
crispy-forms también tiene attributes que puede configurar en FormHelper
que definen funcionalidades extra agradables que puede activar y desactivar fácilmente. También puede crear sus propios atributos personalizados si lo desea.
Finalmente, django-crispy-forms (junto con django-uni-form) tiene más de 67.000 descargas, lo que es bastante bueno para una aplicación Django. El proyecto tiene casi 500 seguidores en Github, varios usuarios grandes, buena cobertura de pruebas y varios años de historia, y aún se mantiene activamente.
Comparado con django-bootstrap-form
Por lo que puedo ver, django-bootstrap-form es solo un filtro para representar un formulario con Bootstrap. Eso es algo que cubre django-crispy-form y ofrece mucho, mucho más. El proyecto se lanzó el 21 de agosto de 2012 y me parece que está reinventando la rueda porque otras aplicaciones ya cubren este caso de uso.
Comparado con django-bootstrap-toolkit
Está inspirado en la forma django-boostrap. Por lo que veo en la documentación, también le proporciona un filtro para representar un formulario con Bootstrap. Aparentemente cubre más material de Bootstrap que formularios, pero no puedo encontrar más información en sus documentos. El último compromiso fue hace 2 meses.
Insistiré en que obviamente no soy la persona adecuada para una comparación que no está sesgada. Es por eso que nunca he escrito sobre esto antes. Podría haber publicado un blog sobre esto varias veces, pero siempre rechacé la idea. Sin embargo, a medida que aumenta la fragmentación de las aplicaciones de formulario (y las aplicaciones de soporte de bootstrap), pensé que este podría ser un buen momento para escribir lo que pienso. Espero que esto ayude a los recién llegados a Django.
Saludos, Miguel