def __call__(self, field, **kwargs):
if isinstance(field.data, (list, tuple)):
def compare(val):
return val in field.data
else:
def compare(val):
return val == field.data
kwargs.setdefault('id', field.id)
if self.multiple:
kwargs['multiple'] = True
html = ['<select %s>' % html_params(name=field.name, **kwargs)]
for item1, item2 in field.choices:
if isinstance(item2, (list, tuple)):
group_label = item1
group_items = item2
html.append('<optgroup %s>' % html_params(label=group_label))
for inner_val, inner_label in group_items:
html.append(self.render_option(inner_val, inner_label, compare(inner_val)))
html.append('</optgroup>')
else:
val = item1
label = item2
html.append(self.render_option(val, label, compare(val)))
html.append('</select>')
return HTMLString(''.join(html))
评论列表
文章目录