Если вы хотите добавить новую переменную (например, some_list
), вам потребуется доступ к контексту шаблона, поэтому simple_tag
будет недостаточно.
Для меня первый подход состоит в том, чтобы попытаться выполнить такую работу в представлении, чтобы шаблоны были как можно более простыми.
Если это не подходит, вам придется написать тег вручную, например:
@register.tag
def make_list(parser, token):
bits = list(token.split_contents())
if len(bits) >= 4 and bits[-2] == "as":
varname = bits[-1]
items = bits[1:-2]
return MakeListNode(items, varname)
else:
raise template.TemplateSyntaxError("%r expected format is 'item [item ...] as varname'" % bits[0])
class MakeListNode(template.Node):
def __init__(self, items, varname):
self.items = map(template.Variable, items)
self.varname = varname
def render(self, context):
context[self.varname] = [ i.resolve(context) for i in self.items ]
return ""
И используйте его для создания новой переменной some_list
:
{% make_list var1 var2 var3 as some_list %}
Не стесняйтесь назвать его лучше!