{% from 'bootstrap/form.html' import form_errors %} {% macro field_description(field) %} {% if field.errors %} {% for error in field.errors %}
{{ error }}
{% endfor %} {% else %} {% if field.description %} {{ field.description|safe }} {% endif %} {% endif %} {% endmacro %} {% macro render_field(field) %} {% set is_checkbox = field.widget.input_type == 'checkbox' %} {% set is_radio = field.widget.input_type == 'radio' %} {% set is_file = field.widget.input_type == 'file' %} {% set is_required = field.flags.required %} {% set has_errors = field.errors %}
{% if not (is_radio or is_checkbox) %} {% endif %} {% if not is_radio %}
{% if is_checkbox %}
{% if has_errors %} {{ field(class_='form-check-input is-invalid') }} {% else %} {{ field(class_='form-check-input') }} {% endif %}
{% else %} {% if is_file %} {% if has_errors %} {{ field(class_='form-control-file is-invalid') }} {% else %} {{ field(class_='form-control-file is-valid') }} {% endif %} {% else %} {% if has_errors %} {{ field(class_='form-control is-invalid') }} {% else %} {{ field(class_='form-control') }} {% endif %} {% endif %} {% endif %} {{ field_description(field) }}
{% endif %}
{% endmacro %} {% macro render_form_fields(form) %} {{ form.hidden_tag() }} {{ form_errors(form, hiddens='only') }} {% for field in form %} {% if not bootstrap_is_hidden_field(field) %} {{ render_field(field) }} {% endif %} {% endfor %} {% endmacro %} {% macro render_form_buttons(buttons) %}
{% for button in buttons %} {{ button.render() }}  {% endfor %}
{% endmacro %} {% macro render_form(form, action) %} {% set enctype = kwargs.pop('enctype', None) %} {% set method = kwargs.pop('method', 'POST') %}
{{ render_form_fields(form) }} {{ render_form_buttons(form.buttons) }}
{% endmacro %}