Add django_horizontal templatetags
This commit is contained in:
@@ -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>
|
||||
|
@@ -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"
|
||||
|
Reference in New Issue
Block a user