Supongamos que tengo un formulario
class SampleClass(forms.Form):
name = forms.CharField(max_length=30)
age = forms.IntegerField()
django_hacker = forms.BooleanField(required=False)
¿Hay alguna manera de definir las clases css en cada campo de modo que pueda usar jQuery según la clase en mi página renderizada?
Esperaba no tener que construir manualmente el formulario.
python
django
django-forms
ashchristopher
fuente
fuente
Respuestas:
Otra solución que no requiere cambios en el código de Python y, por lo tanto, es mejor para los diseñadores y cambios de presentación únicos : django-widget-tweaks . Espero que alguien lo encuentre útil.
fuente
Respondí mi propia pregunta. Suspiro
http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs
No me di cuenta de que se pasó al constructor de widgets.
fuente
Aquí hay otra solución para agregar definiciones de clase a los widgets después de declarar los campos en la clase.
fuente
Use django-widget-tweaks , es fácil de usar y funciona bastante bien.
De lo contrario, esto se puede hacer usando un filtro de plantilla personalizado.
Teniendo en cuenta que representa su formulario de esta manera:
form.subject es una instancia de BoundField que tiene el método as_widget .
puede crear un filtro personalizado "addcss" en "my_app / templatetags / myfilters.py"
Y luego aplique su filtro:
Los sujetos de formulario se representarán con la clase css "MyClass".
Espero que esto ayude.
EDITAR 1
Actualice el filtro de acuerdo con la respuesta de dimyG
Añadir enlace django-widget-tweak
EDITAR 2
fuente
get('class', None).split(' ')
fallará si la etiqueta no tiene el atributo de clase, comoNone
se devuelve. Si lo cambia aget('class', '').split(' ')
obrasAmpliando el método señalado en docs.djangoproject.com:
Pensé que era problemático tener que saber el tipo de widget nativo para cada campo, y pensé que era divertido anular el valor predeterminado solo para poner un nombre de clase en un campo de formulario. Esto parece funcionar para mí:
Esto me parece un poco más limpio.
fuente
Si desea que todos los campos en el formulario hereden una determinada clase, simplemente defina una clase principal, que herede de
forms.ModelForm
, y luego herede de ellaEsto me ayudó a agregar la
'form-control'
clase a todos los campos en todos los formularios de mi aplicación automáticamente, sin agregar replicación de código.fuente
Aquí hay una manera simple de alterar a la vista. agregue a continuación a la vista justo antes de pasarlo a la plantilla.
fuente
Simplemente agregue las clases a su formulario de la siguiente manera.
fuente
Aquí hay una variación de lo anterior que dará a todos los campos la misma clase (por ejemplo, jquery esquinas redondeadas agradables).
fuente
Puedes probar esto ...
Puede ver más información en: Django Widgets
fuente
En caso de que desee agregar una clase al campo de un formulario en una plantilla (no en view.py o form.py), por ejemplo, en los casos en que desea modificar aplicaciones de terceros sin anular sus vistas, entonces un filtro de plantilla como se describe en Charlesthk la respuesta es muy conveniente. Pero en esta respuesta, el filtro de plantilla anula cualquier clase existente que pueda tener el campo.
Traté de agregar esto como una edición, pero se sugirió que se escribiera como una nueva respuesta.
Entonces, aquí hay una etiqueta de plantilla que respeta las clases existentes del campo:
fuente
Como resultado, puede hacer esto en el constructor de formularios ( función init ) o después de que se inició la clase de formulario. Esto a veces es necesario si no está escribiendo su propio formulario y ese formulario proviene de otro lugar:
fuente
También puede usar Django Crispy Forms , es una gran herramienta para definir formularios en caso de que desee usar un marco CSS como Bootstrap o Foundation. Y es fácil especificar clases para sus campos de formulario allí.
Su clase de formulario quisiera esto entonces:
fuente