{% macro render_hidden_errors(form) %}
{%- if form.errors %}
{%- for fieldname, errors in form.errors.items() %}
{%- if is_hidden_field(form[fieldname]) %}
{%- for error in errors %}
{% endcall %}
{%- elif field.type == 'RadioField' -%}
{# note: A cleaner solution would be rendering depending on the widget,
this is just a hack for now, until I can think of something better #}
{% endif %}
{%- endmacro %}
{# valid form types are "basic", "inline" and "horizontal" #}
{% macro render_form(form,
action="",
method="post",
extra_classes=None,
role="form",
form_type="basic",
horizontal_columns=('lg', 2, 10),
enctype=None,
button_map={},
button_style="",
button_size="",
id="",
novalidate=False,
render_kw={},
form_group_classes='',
form_inline_classes='') -%}
{%- set form_inline_classes = form_inline_classes or template.bootstrap.form_inline_classes %}
{%- set _enctype = [] %}
{%- if enctype is none %}
{%- for field in form %}
{%- if field.type in ['FileField', 'MultipleFileField'] %}
{#- for loops come with a fairly watertight scope, so this list-hack is used to be able to set values outside of it #}
{%- set _ = _enctype.append('multipart/form-data') %}
{%- endif %}
{%- endfor %}
{%- else %}
{%- set _ = _enctype.append(enctype) %}
{%- endif %}
{%- if form_type == "inline" %}{% set form_group_classes = 'col-12' %}{% endif %}
{%- endmacro %}
{% macro render_form_row(fields,
row_class='row',
col_class_default='col',
col_map={},
button_map={},
button_style='',
button_size='',
form_group_classes='',
form_type='basic',
horizontal_columns=('lg', 2, 10)) %}
{% for field in fields %}
{% if field.name in col_map %}
{% set col_class = col_map[field.name] %}
{% else %}
{% set col_class = col_class_default %}
{% endif %}