Add django_horizontal templatetags

This commit is contained in:
Melvin Laplanche
2013-08-10 18:38:50 +02:00
parent ce9541367b
commit f68b77401a
2 changed files with 97 additions and 55 deletions

View File

@@ -1,14 +1,57 @@
{% load bootstrap %}
<div class="form-group{% if field.errors %} has-error{% endif %}">
{% if field|is_checkbox %}
<div class="checkbox">
<label>
{{ field }} <span>{{ field.label }}</span>
</label>
<div class="{{ classes.single_value }}">
<div class="checkbox">
<label>
{{ field }} <span>{{ field.label }}</span>
</label>
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% if field.help_text %}
<p class="help-block">
{{ field.help_text|safe }}
</p>
{% endif %}
</div>
</div>
{% else %}{% if field|is_radio %}
<label class="control-label {{ classes.label }}">{{ field.label }}</label>
<div class="{{ classes.value }}">
<div class="radio">
{% for choice in field %}
<label class="radio">
{{ choice.tag }}
{{ choice.choice_label }}
</label>
{% endfor %}
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% if field.help_text %}
<p class="help-block">
{{ field.help_text|safe }}
</p>
{% endif %}
</div>
</div>
{% else %}
<label class="control-label {{ classes.label }}" for="{{ field.auto_id }}">{{ field.label }}</label>
<div class="{{ classes.value }}">
{{ field }}
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% endfor %}
{% if field.help_text %}
<p class="help-block">
@@ -16,41 +59,5 @@
</p>
{% endif %}
</div>
{% else %}{% if field|is_radio %}
<label class="control-label">{{ field.label }}</label>
<div class="radio">
{% for choice in field %}
<label class="radio">
{{ choice.tag }}
{{ choice.choice_label }}
</label>
{% endfor %}
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% if field.help_text %}
<p class="help-block">
{{ field.help_text|safe }}
</p>
{% endif %}
</div>
{% else %}
<label class="control-label" for="{{ field.auto_id }}">{{ field.label }}</label>
{{ field }}
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% if field.help_text %}
<p class="help-block">
{{ field.help_text|safe }}
</p>
{% endif %}
{% endif %}{% endif %}
</div>

View File

@@ -4,41 +4,76 @@ from django import template
register = template.Library()
@register.filter
def bootstrap(element):
markup_classes = {'label': '', 'value': '', 'single_value': ''}
render(element, markup_classes)
@register.filter
def bootstrap_horizontal(element, label_cols={}):
if not label_cols:
label_cols = 'col-sm-2 col-lg-2'
markup_classes = {'label': label_cols,
'value': '',
'single_value': ''}
for cl in label_cols.split(' '):
splited_class = cl.split('-')
try:
value_nb_cols = int(splited_class[-1])
except ValueError:
value_nb_cols = 12
if value_nb_cols >= 12:
splited_class[-1] = 12
else:
offset_class = cl.split('-')
offset_class[-1] = 'offset-' + str(value_nb_cols)
splited_class[-1] = str(12 - value_nb_cols)
markup_classes['single_value'] += ' ' + '-'.join(offset_class)
markup_classes['single_value'] += ' ' + '-'.join(splited_class)
markup_classes['value'] += ' ' + '-'.join(splited_class)
return render(element, markup_classes)
import sys
def render(element, markup_classes):
element_type = element.__class__.__name__.lower()
if element_type == 'boundfield':
classes = element.field.widget.attrs.get('class', '')
classes += ' form-control'
element.field.widget.attrs['class'] = classes
field_classes = element.field.widget.attrs.get('class', '')
field_classes += ' form-control'
element.field.widget.attrs['class'] = field_classes
template = get_template("bootstrapform/field.html")
context = Context({'field': element})
context = Context({'field': element, 'classes': markup_classes})
else:
has_management = getattr(element, 'management_form', None)
if has_management:
for form in element.forms:
for field in form.visible_fields():
classes = field.field.widget.attrs.get('class', '')
classes += ' form-control'
field.field.widget.attrs['class'] = classes
field_classes = field.field.widget.attrs.get('class', '')
field_classes += ' form-control'
field.field.widget.attrs['class'] = field_classes
template = get_template("bootstrapform/formset.html")
context = Context({'formset': element})
context = Context({'formset': element, 'classes': markup_classes})
else:
for field in element.visible_fields():
classes = field.field.widget.attrs.get('class', '')
classes += ' form-control'
field.field.widget.attrs['class'] = classes
field_classes = field.field.widget.attrs.get('class', '')
field_classes += ' form-control'
field.field.widget.attrs['class'] = field_classes
template = get_template("bootstrapform/form.html")
context = Context({'form': element})
context = Context({'form': element, 'classes': markup_classes})
return template.render(context)
@register.filter
def is_checkbox(field):
return field.field.widget.__class__.__name__.lower() == "checkboxinput"