Skip to content

Instantly share code, notes, and snippets.

@maximebf
Created October 31, 2012 11:56
Show Gist options
  • Save maximebf/3986659 to your computer and use it in GitHub Desktop.
Save maximebf/3986659 to your computer and use it in GitHub Desktop.
Jinja2 macro to render WTForms fields with Twitter Bootstrap
{% macro form_field(field) -%}
{% set with_label = kwargs.pop('with_label', False) %}
{% set placeholder = '' %}
{% if not with_label %}
{% set placeholder = field.label.text %}
{% endif %}
<div class="control-group {% if field.errors %}error{% endif %}">
{% if with_label %}
<label for="{{ field.id }}" class="control-label">
{{ field.label.text }}{% if field.flags.required %} *{% endif %}:
</label>
{% endif %}
<div class="controls">
{% set class_ = kwargs.pop('class_', '') %}
{% if field.flags.required %}
{% set class_ = class_ + ' required' %}
{% endif %}
{% if field.type == 'BooleanField' %}
<label class="checkbox">
{{ field(class_=class_, **kwargs) }}
{{ field.label.text|safe }}
</label>
{% else %}
{% if field.type in ('TextField', 'TextAreaField', 'PasswordField') %}
{% set class_ = class_ + ' input-xlarge' %}
{% elif field.type == 'FileField' %}
{% set class_ = class_ + ' input-file' %}
{% endif %}
{{ field(class_=class_, placeholder=placeholder, **kwargs) }}
{% endif %}
{% if field.errors %}
<span class="error help-inline">{{ field.errors|join(', ') }}</span>
{% endif %}
{% if field.description %}
<p class="help-block">{{ field.description|safe }}</p>
{% endif %}
</div>
</div>
{%- endmacro %}
@cloud-eagle
Copy link

Now I understand that I am wrong about field() macro. No need to provide that macro. But I have not understand the **kwargs.Thank you for great code!

@rawrgulmuffins
Copy link

This has been very helpful for me. Thank you very much.

I forked and added an if statement to this macro. If you're using a select field then this macro will put a placehold attribute on that select field which is invalid html. I just added an if statement to check for select fields.

@alienhaxor
Copy link

Thanks.

I created a fork that renders the field properly with bootstrap 3.0.0

@dasfaha
Copy link

dasfaha commented Oct 26, 2013

How do I use this macro, where do I add this code?

Copy link

ghost commented Jun 18, 2014

Can you update this to the latest bootstrap3?

@wassname
Copy link

wassname commented Dec 4, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment