Skip to content

Instantly share code, notes, and snippets.

@ojii
Created January 3, 2012 13:54
Show Gist options
  • Save ojii/1554970 to your computer and use it in GitHub Desktop.
Save ojii/1554970 to your computer and use it in GitHub Desktop.
not proud of that code, but it seems to work
# -*- 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment