{# 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) -%} {# You will need javascript similar to below for descriptions to work properly $('[rel="kegel-field-description"]').popover({ container: 'body', html: true, trigger: 'focus', content: function () { var clone = $($(this).data('field-description-content')).clone(true).removeClass('hide'); return clone; } }).click(function(e) { e.preventDefault(); }); #} {% 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 field_widget(field) %} {{ field(class_='form-control', disabled=field.flags.disabled, readonly=field.flags.readonly, **kwargs) }} {% 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 %}
{% 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) -%} {% call div_form_group(field, **kwargs) %} {% if label_visible %} {{ field.label(class_='control-label') }} {% endif %}
{% for value, label, checked 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='') -%}
Cancel
{%- endmacro %} {% macro render_field(f) -%} {% if f.type == 'BooleanField' %} {{ checkbox_field(f) }} {% elif f.type == 'RadioField' %} {{ radio_field(f) }} {% elif f is none %} {# Do nothing b/c the field is None #} {% else %} {{ field(f) }} {% 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) -%}
{{ form.hidden_tag() if form.hidden_tag }} {% if caller %} {{ caller() }} {% elif field_names %} {{ fields(form, field_names) }} {% else %} {% for f in form %} {{ render_field(f) }} {% endfor %} {% endif %} {{ submit_group(action_text=action_text, btn_class=btn_class, cancel_url=cancel_url) }}
{%- 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 %}