Estoy usando django-uniform y para usar algunas características uniformes, estoy buscando una forma de agregar clases css directamente desde la declaración de formulario (para widgets independientes).¿Cómo establecer la clase css de una etiqueta en una declaración de formulario django?
(como un bono, aquí mi reutilizable de sólo lectura hecha en casa fragmento mixin ...)
from django import forms
def _get_cleaner(form, field):
def clean_field():
return getattr(form.instance, field, None)
return clean_field
class UniformROMixin(forms.BaseForm):
"""
UniformROMixin, inherits to turn some fields read only
- read_only = list of field names.
"""
def __init__(self, *args, **kwargs):
super(UniformROMixin, self).__init__(*args, **kwargs)
if hasattr(self, "read_only"):
if self.instance and self.instance.pk:
for field in self.read_only:
self.fields[field].widget.attrs['readonly'] = True
self.fields[field].widget.attrs['class'] += "readOnly"
# here I would like to set css class of the label
# created from the self.fields[field].label string
setattr(self, "clean_" + field, _get_cleaner(self, field))
Mi única manera de que ahora es añadir un poco de javascript en mi plantilla de formulario genérico y agregar clases manual.
¿Alguna idea brillante?
no sé de una manera de agregar una clase CSS en la declaración de la forma, pero he utilizado: http://pypi.python.org/pypi/django-widget-tweaks para agregar convenientemente atributos a cosas como etiquetas de etiqueta y elementos de formulario en el nivel de plantilla cuando tiene sentido hacerlo. – Brandon
Gracias por la sugerencia. En mi caso, no manejo la parte de la plantilla completamente hecha por django-uniform. Aún puedo ver cómo funciona el método "renderizado" del widget y anularlo ... – christophe31