我有以下简单模板标记,它返回值列表。 我需要的是像模板标签一样重写它,所以我可以使用返回列表作为变量
@register.simple_tag
def show_active_filters(cleaned_filter):
filter_list = []
if cleaned_filter:
if cleaned_filter['checkbox']:
for key, value in cleaned_filter['checkbox'].items():
for values in value:
filter_list.append('%s: %s' % (key, values))
if cleaned_filter['from_to']:
for filter_name, filter_values in cleaned_filter['from_to'].items():
sorted_values = sorted(filter_values.values())
if len(sorted_values) < 2:
try:
filter_values['from']
filter_str = u'%s : от %s' % (filter_name, sorted_values[0])
filter_list.append(filter_str)
except:
filter_str = u'%s : до %s' % (filter_name, sorted_values[0])
filter_list.append(filter_str)
else:
filter_str = u'%s : от %s - до %s' % (filter_name, sorted_values[0], sorted_values[1])
filter_list.append(filter_str)
return filter_list
我试图这样做的方式是
@register.tag(name='show_active_filters')
def do_show_active_filters(parser, token):
error = False
try:
tag_name, cleaned_filter, _as, var_name = token.split_contents()
if _as != 'as':
error = True
except:
error = True
if error:
raise template.TemplateSyntaxError, 'invalid stuff"'
else:
return CleanedFilterDictionary(cleaned_filter, var_name)
class CleanedFilterDictionary(template.Node):
def __init__(self, cleaned_filter, var_name='filter_vals'):
self.cleaned_filter = cleaned_filter
self.var_name = var_name
def render(self, context):
context[self.var_name] = get_active_filters(cleaned_filter)
return ''
def get_active_filters(cleaned_filter):
filter_list = []
if cleaned_filter:
if cleaned_filter['checkbox']:
for key, value in cleaned_filter['checkbox'].items():
for values in value:
filter_list.append('%s: %s' % (key, values))
if cleaned_filter['from_to']:
for filter_name, filter_values in cleaned_filter['from_to'].items():
sorted_values = sorted(filter_values.values())
if len(sorted_values) < 2:
try:
filter_values['from']
filter_str = u'%s : от %s' % (filter_name, sorted_values[0])
filter_list.append(filter_str)
except:
filter_str = u'%s : до %s' % (filter_name, sorted_values[0])
filter_list.append(filter_str)
else:
filter_str = u'%s : от %s - до %s' % (filter_name, sorted_values[0], sorted_values[1])
filter_list.append(filter_str)
return filter_list
无法获取如何将cleaning_filter变量传递给类实例