|
# -*- coding: utf-8 -*- |
|
from classytags.arguments import Argument |
|
from classytags.core import Options |
|
from classytags.helpers import InclusionTag |
|
from django import template |
|
from django.utils.encoding import force_unicode |
|
from floppyforms.widgets import Select |
|
from itertools import chain |
|
|
|
|
|
register = template.Library() |
|
|
|
class RenderField(InclusionTag): |
|
template = 'formfields/dummy.html' |
|
options = Options( |
|
Argument('field'), |
|
) |
|
|
|
def get_template(self, context, field): |
|
tpl = getattr(field.field.widget, 'wrapper_template_name', getattr(field.field.widget, 'template_name', None)) |
|
return tpl or self.template |
|
|
|
def get_context(self, context, field): |
|
context['field'] = field |
|
if isinstance(field.field.widget, Select): |
|
value = field.value() or '' |
|
choices = chain(field.field.choices, ()) |
|
final_choices = [] |
|
for option_value, option_label in choices: |
|
final_choices.append((force_unicode(option_value), option_label)) |
|
context['choices'] = final_choices |
|
if callable(getattr(field.field.widget, 'get_context', None)): |
|
name = field.html_name |
|
attrs = {} |
|
attrs['id'] = field.auto_id |
|
if hasattr(field.field.widget, 'clear_checkbox_name'): |
|
context['checkbox_name'] = field.field.widget.clear_checkbox_name(name) |
|
context['checkbox_id'] = field.field.widget.clear_checkbox_id(context['checkbox_name']) |
|
value = field.value() |
|
context.update(field.field.widget.get_context(name, value, attrs)) |
|
return context |
|
|
|
register.tag(RenderField) |