{%- if _ is not defined -%} {% macro _(message) -%} {{ message }} {%- endmacro %} {%- endif -%} {# Renders field for bootstrap 3 standards. Params: field - WTForm field kwargs - pass any arguments you want in order to put them into the html attributes. There are few exceptions: for - for_, class - class_, class__ - class_ Example usage: {{ horz_form.field(form.email, placeholder='Input email', type='email') }} #} {% macro div_form_group(field) -%}
{{ caller(**kwargs) }}
{%- endmacro %} {% macro description(field) -%} {% if field.description is callable %} {{ field.description()|safe }} {% else %} {{ field.description|safe }} {% endif %} {%- endmacro %} {% macro field(field, label_visible=true) -%} {% call div_form_group(field, **kwargs) %} {% if (field.type != 'HiddenField' and field.type != 'CSRFTokenField') and label_visible %} {{ field.label(class_='control-label') }} {% endif %}
{{ field_widget(field, **kwargs) }} {% if field.description %} {{ description(field) }} {% endif %}
{% endcall %} {%- endmacro %} {% macro custom_css() %} {% endmacro %} {% macro custom_js() %} {% endmacro %} {% macro multi_checkbox(field) %}
{% endmacro %} {% macro field_widget(field) %} {% if field.type == "MultiCheckboxField" %} {{ multi_checkbox(field) }} {% else %} {% if field.flags.disabled %}{% set _dummy = kwargs.update({'disabled': field.flags.disabled}) %}{% endif %} {% if field.flags.readonly %}{% set _dummy = kwargs.update({'readonly': field.flags.readonly}) %}{% endif %} {{ field(class_='form-control is-invalid' if field.errors else 'form-control', **kwargs) }} {% endif %} {% if field.errors %} {% for e in field.errors %}

{{ e }}

{% endfor %} {% endif %} {% endmacro %} {# Renders checkbox fields since they are represented differently in bootstrap Params: field - WTForm field (there are no check, but you should put here only BooleanField. kwargs - pass any arguments you want in order to put them into the html attributes. There are few exceptions: for - for_, class - class_, class__ - class_ Example usage: {{ horiz_form.checkbox_field(form.remember_me) }} #} {% macro checkbox_field(field) -%} {% call div_form_group(field, **kwargs) %}
{% if field.errors %} {% for e in field.errors %}

{{ e }}

{% endfor %} {% endif %}
{% if field.description %} {{ description(field) }} {% endif %} {% endcall %} {%- endmacro %} {# Renders radio field Params: field - WTForm field (must have an `iter_choices` method) kwargs - pass any arguments you want in order to put them into the html attributes. There are few exceptions: for - for_, class - class_, class__ - class_ Example usage: {{ horiz_form.radio_field(form.answers) }} #} {% macro radio_field(field, label_visible=true, tabIndex=1) -%} {% call div_form_group(field, **kwargs) %} {% if label_visible %} {{ field.label(class_='control-label') }} {% endif %}
{% for value, label, checked, kw in field.iter_choices() %}
{% endfor %} {% if field.errors %} {% for e in field.errors %}

{{ e }}

{% endfor %} {% endif %}
{% if field.description %} {{ description(field) }} {% endif %} {% endcall %} {%- endmacro %} {% macro submit_group(action_text='Submit', btn_class='btn btn-primary', cancel_url='') -%}
{% if cancel_url %} Cancel {% endif %}
{%- endmacro %} {% macro render_field(f) -%} {% if f.type == 'BooleanField' %} {{ checkbox_field(f, **kwargs) }} {% elif f.type == 'RadioField' %} {{ radio_field(f, **kwargs) }} {% elif f.type == 'FormField' %} {{ render_form_fields(f, render_hidden=true) }} {% elif f is none %} {# Do nothing b/c the field is None #} {% else %} {{ field(f, **kwargs) }} {% endif %} {%- endmacro %} {% macro form_errors(form) -%} {% if form.form_errors %}
{% for e in form.form_errors %}

{{ e }}

{% endfor %}
{% endif %} {% endmacro %} {# Renders WTForm in bootstrap way. There are two ways to call function: - as macros: it will render all field forms using cycle to iterate over them - as call: it will insert form fields as you specify: e.g. {% call macros.render_form(form, action_url=url_for('login_view'), action_text='Login', class_='login-form') %} {{ macros.render_field(form.email, placeholder='Input email', type='email') }} {{ macros.render_field(form.password, placeholder='Input password', type='password') }} {{ macros.render_checkbox_field(form.remember_me, type='checkbox') }} {% endcall %} Params: form - WTForm class action_url - url where to submit this form action_text - text of submit button class_ - sets a class for form #} {% macro form( form, field_names=None, action_url='', action_text='Submit', class_='form-horizontal', btn_class='btn btn-primary', cancel_url='', form_upload=false, dirty_check=false ) -%}
{{ form.hidden_tag() if form.hidden_tag }} {{ form_errors(form) }} {% if caller %} {{ caller() }} {% elif field_names %} {{ fields(form, field_names) }} {% else %} {{ render_form_fields(form) }} {% endif %} {{ submit_group(action_text=action_text, btn_class=btn_class, cancel_url=cancel_url) }}
{%- endmacro %} {% macro render_form_fields(form, render_hidden=false) -%} {# Render hidden tags if flag is passed (for subforms only) #} {{ form.hidden_tag() if render_hidden and form.hidden_tag }} {% for f in form %} {% if not f.widget.input_type == 'hidden' %} {{ render_field(f) }} {% endif %} {% endfor %} {%- endmacro %} {% macro fields(form, field_names) -%} {% for field_name in field_names %} {{ render_field(form[field_name]) }} {% endfor %} {%- endmacro %} {% macro section(heading, form, field_names) -%}

{{heading}}

{% if caller %} {{ caller() }} {% else %} {{ fields(form, field_names) }} {% endif %} {%- endmacro %}