kawaz.core.filters.widgets のソースコード
from urllib.parse import urlencode
from django_filters.widgets import LinkWidget
from django.forms.widgets import flatatt
from django.db.models.fields import BLANK_CHOICE_DASH
from django.utils.safestring import mark_safe
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
[ドキュメント]class ListGroupLinkWidget(LinkWidget):
"""
Django FilterのfieldsをBootstrapのList Groupを使って出力するWidget
<div class="list-group">
<a href="list-group-item" class="">All</a>
<a href="list-group-item active" class="">Item1</a>
<a href="list-group-item" class="">Item2</a>
</div>
"""
[ドキュメント] def render(self, name, value, attrs=None, choices=()):
if not hasattr(self, 'data'):
self.data = {}
if value is None:
value = ''
final_attrs = self.build_attrs(attrs)
output = ['<div class="list-group"%s>' % flatatt(final_attrs)]
options = self.render_options(choices, [value], name)
if options:
output.append(options)
output.append('</div>')
return mark_safe('\n'.join(output))
[ドキュメント] def render_option(self, name, selected_choices,
option_value, option_label):
option_value = force_text(option_value)
if option_label == BLANK_CHOICE_DASH[0][1]:
option_label = _("All")
data = self.data.copy()
data[name] = option_value
selected = data == self.data or option_value in selected_choices
try:
url = data.urlencode()
except AttributeError:
url = urlencode(data)
return self.option_string() % {
'attrs': selected and ' class="list-group-item active"' or ' class="list-group-item"',
'query_string': url,
'label': force_text(option_label)
}