Los widgets de Django se renderizan utilizando el sistema de motores de plantillas de Django:doc:` </topics/templates>`.
El proceso de renderizado de formularios puede personalizarse a varios niveles:
Los widgets pueden especificar nombres de plantilla personalizados.
Las formas y los widgets pueden especificar clases de renderizador personalizadas.
La plantilla de un widget puede ser sobrescrita por un proyecto. (Las aplicaciones reutilizables suelen no sobrescribir las plantillas incorporadas porque podrían conflictuar con las plantillas personalizadas del proyecto.)
El control de la renderización de las plantillas de formularios está controlado por una clase de renderizador personalizable. Una clase de renderizador personalizada se puede especificar actualizando la configuración FORM_RENDERER. Por defecto, es 'django.forms.renderers.DjangoTemplates'.
Al especificar un renderizador de formularios personalizado y sobrescribiendo el atributo form_template_name se puede ajustar la marcaje de formularios por defecto en todo el proyecto desde un solo lugar.
También puedes proporcionar un renderizador personalizado por-formulario o por-widget estableciendo el atributo Form.default_renderer o utilizando el argumento renderer del método Form.render(), o Widget.render().
Los puntos de coincidencia se aplican a la renderización de formularios. Consulta Utilizando conjuntos de formularios en vistas y plantillas para más información.
Utiliza uno de los renderizadores de plantillas de formularios incorporados o implementa tu propio. Los renderizadores personalizados deben implementar un método render(template_name, context, request=None). Debe devolver una plantilla renderizada (como una cadena) o levantar TemplateDoesNotExist.
La clase base para los renderizadores de formularios incorporados.
El nombre predeterminado del plantilla a utilizar para renderizar un formulario.
Por defecto utiliza la plantilla "django/forms/div.html".
El nombre predeterminado de la plantilla a utilizar para renderizar un conjunto de formularios.
Por defecto utiliza la plantilla "django/forms/formsets/div.html".
El nombre predeterminado de la plantilla utilizada para renderizar una BoundField.
Por defecto utiliza la plantilla "django/forms/field.html"
La clase predeterminada utilizada para representar campos formularios a lo largo del proyecto.
Por defecto utiliza la clase BoundField.
Esto se puede personalizar más aún utilizando Form.bound_field_class para sobrescribir por formulario o Field.bound_field_class para sobrescribir por campo.
DjangoTemplates¶Esta forma utiliza un motor de plantillas independiente DjangoTemplates (no conectado a lo que podrías haber configurado en la TEMPLATES configuración). Carga las plantillas primero desde el directorio de plantillas de formularios integradas en django/forms/templates y luego desde los directorios de plantillas de aplicaciones instaladas utilizando el cargador app_directories.
Si deseas renderizar plantillas con personalizaciones de tu TEMPLATES configuración, como procesadores de contexto por ejemplo, utiliza el formador TemplatesSetting.
Obsoleto desde la versión 5.0.
El alias de DjangoTemplates.
Jinja2¶Este formador es igual al formador DjangoTemplates excepto que utiliza un motor de plantillas Jinja2. Las plantillas para los widgets integrados se encuentran en django/forms/jinja2 y las aplicaciones instaladas pueden proporcionar plantillas en un directorio jinja2.
Para utilizar este motor, todas las formas y widgets de tu proyecto y sus aplicaciones terceras deben tener plantillas Jinja2. A menos que proporciones tus propias plantillas Jinja2 para los widgets que no tienen ninguna, no puedes utilizar este formador. Por ejemplo, django.contrib.admin no incluye plantillas Jinja2 para sus widgets debido a su uso de etiquetas de plantilla Django.
Obsoleto desde la versión 5.0.
El alias de Jinja2.
Este renderizador te da un control completo sobre cómo se obtienen las plantillas de formulario y widget. Utiliza la función get_template() para encontrar plantillas según lo configurado en la TEMPLATES configuración.
Al utilizar este renderizador junto con las plantillas incorporadas, es necesario que:
'django.forms' esté en INSTALLED_APPS y al menos un motor tenga APP_DIRS=True.
Agregar el directorio de plantillas incorporadas en DIRS de uno de los motores de plantillas. Para generar ese camino:
import django
django.__path__[0] + "/forms/templates" # or '/forms/jinja2'
Al utilizar este renderizador debes asegurarte de que las plantillas de formulario que necesita tu proyecto puedan ser localizadas.
Las plantillas de formset reciben un contexto desde BaseFormSet.get_context(). Por defecto, los formsets reciben un diccionario con los siguientes valores:
formset: La instancia del conjunto de formularios.
Los formularios de plantillas reciben un contexto desde Form.get_context(). Por defecto, los formularios reciben un diccionario con los siguientes valores:
form: El formulario vinculado.
fields: Todos los campos vinculados, excepto los campos ocultos.
hidden_fields: Todos los campos vinculados ocultos.
errors: Todas las errores del formulario no relacionados con el campo o ocultos.
Las plantillas de campo reciben un contexto desde BoundField.get_context(). Por defecto, los campos reciben un diccionario con los siguientes valores:
field: El BoundField.
Las plantillas de widget reciben un contexto desde Widget.get_context(). Por defecto, los widgets reciben un valor único en el contexto, widget. Este es un diccionario que contiene valores como:
nombre
value
attrs
is_hidden
template_name
Algunos widgets agregan información adicional al contexto. Por ejemplo, todos los widgets que heredan de Input definen widget['type'] y MultiWidget define widget['subwidgets'] con fines de bucle.
Para sobreescribir las plantillas de formset, debes utilizar el TemplatesSetting renderer. Luego, sobrescribir las plantillas de formset funciona de la misma manera que sobrescribiendo cualquier otra plantilla en tu proyecto.
Para sobreescribir las plantillas de formulario, debes utilizar el TemplatesSetting renderer. Luego, sobrescribir las plantillas de formulario funciona de la misma manera que sobrescribiendo cualquier otra plantilla en tu proyecto.
Para sobreescribir las plantillas de campo, debes utilizar el TemplatesSetting renderer. Luego, sobrescribir las plantillas de campo funciona de la misma manera que sobrescribiendo cualquier otra plantilla en tu proyecto.
Cada widget tiene un atributo template_name con un valor como input.html. Los templates de widgets integrados se almacenan en el camino django/forms/widgets. Puedes proporcionar un template personalizado para input.html definiendo django/forms/widgets/input.html, por ejemplo. Consulta widgets integrados para el nombre del template de cada widget.
Para sobreescribir los templates de widgets, debes utilizar el TemplatesSetting renderer. Luego, sobrescribir los templates de widgets funciona de la misma manera que sobrescribiendo cualquier otro template en tu proyecto.
may 31, 2026