{% load i18n widget_tweaks %} {# expects: field, col_class (optional), rows (optional) #}
{# Checkbox renders its own label #} {% if field|widget_type != "checkboxinput" %} {% endif %} {# CKEditor (or any complex widget): render as-is #} {% if field.field.widget.template_name and "ckeditor" in field.field.widget.template_name %} {{ field }} {# Textarea #} {% elif field|widget_type == "textarea" %} {{ field|add_class:"form-control"|attr:"rows:"|add_error_class:"is-invalid" }} {# Select / Multi-select #} {% elif field|widget_type == "select" or field|widget_type == "selectmultiple" %} {{ field|add_class:"form-select"|add_error_class:"is-invalid" }} {# Checkbox #} {% elif field|widget_type == "checkboxinput" %}
{{ field|add_class:"form-check-input"|add_error_class:"is-invalid" }}
{# File input #} {% elif field|widget_type == "clearablefileinput" or field|widget_type == "fileinput" %} {{ field|add_class:"form-control"|add_error_class:"is-invalid" }} {% if field.value %}
{% trans "Current:" %} {% if field.value.url %} {{ field.value }} {% else %} {{ field.value }} {% endif %}
{% endif %} {# Default input (text, number, email, etc.) #} {% else %} {{ field|add_class:"form-control"|add_error_class:"is-invalid" }} {% endif %} {% if field.help_text %}
{{ field.help_text }}
{% endif %} {% for e in field.errors %}
{{ e }}
{% endfor %}