{% from 'aiohttp_admin/blocks/form/fields/field.html' import field_generator %} {% from 'aiohttp_admin/blocks/messages.html' import messages %} {% from 'aiohttp_admin/blocks/form/fields/readonly_field.html' import readonly_field %} {% macro form( action, controller_view, get_field_value, mapper=None, fields=None, method='POST', submit_text='submit', submit_cls='', exclude=None, readonly=None, with_defaults=False ) %} {% set exclude = exclude or [] %} {% set readonly = readonly or [] %}
{# Show a general error message if the form has errors #} {% if mapper and mapper.with_errors %} {{ messages("Invalid form", type="danger") }} {% endif %} {# Render visible fields #} {% if mapper %} {% for name, field in mapper.fields.items() %} {% if (fields == '__all__' or name in fields) and name not in exclude %} {% if name in readonly %} {{ readonly_field(name, field, get_field_value, with_defaults) }} {% else %} {{ field_generator(name, field, controller_view, get_field_value, with_defaults) }} {% endif %} {% endif %} {% endfor %} {% endif %} {# Show a general form error if present #} {% if mapper and mapper.error %}
{{ mapper.error }}
{% endif %} {# Show errors for hidden/excluded fields (not rendered above) #} {% if mapper %} {% for name, field in mapper.fields.items() %} {% if fields != '__all__' and (name not in fields or name in exclude) and field.errors %}
.... err {{ name }} - {{ field.errors|join(', ') }} {# This field is not visible in the form, but has errors #}
{% endif %} {% endfor %} {% endif %}
{% endmacro %}