Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I just wrote a class to do that:</p> <pre><code>from django.forms.widgets import Select from django.utils.encoding import force_unicode from itertools import chain from django.utils.html import escape, conditional_escape class ExtendedSelect(Select): """ A subclass of Select that adds the possibility to define additional properties on options. It works as Select, except that the ``choices`` parameter takes a list of 3 elements tuples containing ``(value, label, attrs)``, where ``attrs`` is a dict containing the additional attributes of the option. """ def render_options(self, choices, selected_choices): def render_option(option_value, option_label, attrs): option_value = force_unicode(option_value) selected_html = (option_value in selected_choices) and u' selected="selected"' or '' attrs_html = [] for k, v in attrs.items(): attrs_html.append('%s="%s"' % (k, escape(v))) if attrs_html: attrs_html = " " + " ".join(attrs_html) else: attrs_html = "" return u'&lt;option value="%s"%s%s&gt;%s&lt;/option&gt;' % ( escape(option_value), selected_html, attrs_html, conditional_escape(force_unicode(option_label))) # Normalize to strings. selected_choices = set([force_unicode(v) for v in selected_choices]) output = [] for option_value, option_label, option_attrs in chain(self.choices, choices): if isinstance(option_label, (list, tuple)): output.append(u'&lt;optgroup label="%s"&gt;' % escape(force_unicode(option_value))) for option in option_label: output.append(render_option(*option)) output.append(u'&lt;/optgroup&gt;') else: output.append(render_option(option_value, option_label, option_attrs)) return u'\n'.join(output) </code></pre> <p>Example:</p> <pre><code>select = ExtendedSelect(choices=( (1, "option 1", {"label": "label 1"}), (2, "option 2", {"label": "label 2"}), )) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload