No conozco ningún otro camino en plan simple Django. Los accesos directos como form.field
o form.as_p
realmente le ayudan a comenzar, pero al final uno puede recurrir a html simple. Así es como lo veo. No quiere decir que no haya necesidad de más control sobre la representación. Recuerdo haber leído this discussion about form rendering en la lista de correo de Django.
Simon Willison estaba/estaba trabajando en una biblioteca para dar a los diseñadores más control, usted puede encontrar su fuente on github. Es un poco viejo, por lo que podría no funcionar más. Pero con respecto a su pregunta, este ejemplo parece que podría ser útil para usted:
{% field form.name class="myclass" %}
<!-- renders as -->
<input type="text" name="name" id="id_name" class="myclass">
En realidad esta funcionalidad debería ser fácil de lograr. Necesita una etiqueta de plantilla que acepte un campo de formulario, actualice los atributos de widgets (los que ya puede configurar en el formulario) y renderice el campo.
Al iterar sobre un formulario se producen instancias de BoundField
, que se representa con el método __unicode__
. Debería pasar todos los argumentos de palabra clave a la función de representación de widgets. Un proyecto de esta idea:
@register.simple_tag
def field(boundfield, **kwargs):
if self.field.show_hidden_initial:
return self.as_widget(attrs=kwargs) + self.as_hidden(only_initial=True)
return self.as_widget(attrs=kwargs)