|
- {# Source: https://gist.github.com/bearz/7394681 #}
-
- {# 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) -%}
-
- <div class="form-group {% if field.errors %}has-error{% endif %} {{ kwargs.pop('class_', '') }}">
- {% if (field.type != 'HiddenField' or field.type !='CSRFTokenField') and label_visible %}
- <label for="{{ field.id }}" class="control-label">{{ field.label }}</label>
- {% endif %}
- {{ field(class_='form-control', **kwargs) }}
- {% if field.errors %}
- {% for e in field.errors %}
- <p class="help-block">{{ e }}</p>
- {% endfor %}
- {% endif %}
- </div>
- {%- 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) -%}
- <div class="checkbox">
- <label>
- {{ field(type='checkbox', **kwargs) }} {{ field.label }}
- </label>
- </div>
- {%- 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() %}
- <div class="radio">
- <label>
- <input type="radio" name="{{ field.id }}" id="{{ field.id }}" value="{{ value }}">{{ label }}
- </label>
- </div>
- {% endfor %}
- {%- 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='', action_text='Submit', class_='', btn_class='btn btn-default') -%}
-
- <form method="POST" action="{{ action_url }}" role="form" class="{{ class_ }}" data-parsley-validate>
- {{ form.hidden_tag() if form.hidden_tag }}
- {% if caller %}
- {{ caller() }}
- {% else %}
- {% for f in form %}
- {% if f.type == 'BooleanField' %}
- {{ render_checkbox_field(f) }}
- {% elif f.type == 'RadioField' %}
- {{ render_radio_field(f) }}
- {% else %}
- {{ render_field(f) }}
- {% endif %}
- {% endfor %}
- {% endif %}
- <button type="submit" class="{{ btn_class }}">{{ action_text }} </button>
- </form>
- {%- endmacro %}
|