{% extends 'skelet.html.j2' %} {# 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: {{ macros.render_field(form.email, placeholder='Input email', type='email') }} #} {% macro render_field(field, label_visible=true, horizontal=false) -%}
{% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %} {% endif %}
{{ field(class_='form-control', **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: {{ macros.render_checkbox_field(form.remember_me) }} #} {% macro render_checkbox_field(field) -%}
{%- endmacro %} {# Renders radio field 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: {{ macros.render_radio_field(form.answers) }} #} {% macro render_radio_field(field) -%} {% for value, label, _ in field.iter_choices() %}
{% endfor %} {%- endmacro %} {# Renders range field 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: {{ macros.render_range_field(form.answere) }} #} {% macro render_range_field(field) -%}
{{ field(class_='form-control', oninput='this.parentElement.nextElementSibling.children[0].value = this.value', **kwargs) }}
{% if field.errors %} {% for e in field.errors %}

{{ e }}

{% endfor %} {% endif %}
{%- endmacro %} {% macro render_password_field(field, label_visible=true, horizontal=false) -%}
{{ field(class_='form-control', **kwargs) }}
{% if field.errors %} {% for e in field.errors %}

{{ e }}

{% endfor %} {% endif %}
{%- endmacro %} {# Renders submit field 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: {{ macros.render_submit_field(form.answers) }} #} {% macro render_submit_field(field, btn_class='btn btn-primary') -%} {%- endmacro %} {# Renders form field 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: {{ macros.render_submit_field(form.answers) }} #} {% macro render_form_field(field) -%}
{#{{field.label}}#} {{ _render_form(field, horizontal=true) }}
{%- endmacro %} {% macro render_list_field(field, horizontal) -%}
{{ field.label.text }} {% if field.modify %} {% endif %} {% if field.modify %} {{ ('Add') }} {% endif %}
{%- endmacro %} {% macro _render_field(f) %} {% if f.type == 'BooleanField' %} {{ render_checkbox_field(f, **kwargs) }} {% elif f.type == 'RadioField' %} {{ render_radio_field(f, **kwargs) }} {% elif f.type == 'PasswordField' %} {{ render_password_field(f, **kwargs) }} {% elif f.type == 'DecimalRangeField' %} {{ render_range_field(f, **kwargs) }} {% elif f.type == 'URLField' %} {{ render_field(f, **kwargs) }} {% elif f.type == 'SubmitField' %} {{ render_submit_field(f, **kwargs) }} {% elif f.type == 'FormField' %} {{ render_form_field(f, **kwargs) }} {% elif f.type == 'ModelFieldList' %} {{ render_list_field(f, **kwargs) }} {% elif f.type == 'FieldList' %} {{ render_list_field(f, **kwargs) }} {% else %} {{ render_field(f, **kwargs) }} {% endif %} {% endmacro %} {% macro _render_form(form) -%} {% if caller %} {{ caller() }} {% else %} {% for f in form %} {{ _render_field(f, **kwargs) }} {% 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 render_form(form, action_url='', id='', action_text='Submit', class_='', btn_class='btn btn-primary', method='post', onsubmit='') -%}
{{ _render_form(form) }} {% if not form.submit %} {% endif %}
{%- endmacro %}