99 lines
		
	
	
		
			No EOL
		
	
	
		
			4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			No EOL
		
	
	
		
			4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {# 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 %} |