Ticket #22950: 22950-1.diff

File 22950-1.diff, 2.1 KB (added by Claude Paroz, 10 years ago)

Proof-of-concept patch

  • django/forms/widgets.py

    diff --git a/django/forms/widgets.py b/django/forms/widgets.py
    index 4abc135..ee8ab5c 100644
    a b class ChoiceFieldRenderer(object):  
    643643    """
    644644
    645645    choice_input_class = None
     646    outer_html = '<ul{id_attr}>{content}</ul>'
     647    inner_html = '<li>{choice_value}{sub_widgets}</li>'
    646648
    647649    def __init__(self, name, value, attrs, choices):
    648650        self.name = name
    class ChoiceFieldRenderer(object):  
    664666        item in the list will get an id of `$id_$i`).
    665667        """
    666668        id_ = self.attrs.get('id', None)
    667         start_tag = format_html('<ul id="{0}">', id_) if id_ else '<ul>'
    668         output = [start_tag]
     669        output = []
    669670        for i, choice in enumerate(self.choices):
    670671            choice_value, choice_label = choice
    671672            if isinstance(choice_label, (tuple, list)):
    class ChoiceFieldRenderer(object):  
    677678                                                      attrs=attrs_plus,
    678679                                                      choices=choice_label)
    679680                sub_ul_renderer.choice_input_class = self.choice_input_class
    680                 output.append(format_html('<li>{0}{1}</li>', choice_value,
    681                                           sub_ul_renderer.render()))
     681                output.append(format_html(self.inner_html, choice_value=choice_value,
     682                                          sub_widgets=sub_ul_renderer.render()))
    682683            else:
    683684                w = self.choice_input_class(self.name, self.value,
    684685                                            self.attrs.copy(), choice, i)
    685                 output.append(format_html('<li>{0}</li>', force_text(w)))
    686         output.append('</ul>')
    687         return mark_safe('\n'.join(output))
     686                output.append(format_html(self.inner_html,
     687                                          choice_value=force_text(w), sub_widgets=''))
     688        return format_html(self.outer_html,
     689                           id_attr=format_html(' id="{0}"', id_) if id_ else '',
     690                           content=mark_safe('\n'.join(output)))
    688691
    689692
    690693class RadioFieldRenderer(ChoiceFieldRenderer):
Back to Top