【发布时间】:2015-04-08 22:13:08
【问题描述】:
我知道,我可以做类似的事情
{% cycle "value1" "value2" %}
但是,如果我将所有输入值都放在一个列表中怎么办。我可以这样做吗?
{% cycle my_input_list %}
【问题讨论】:
标签: python django django-templates
我知道,我可以做类似的事情
{% cycle "value1" "value2" %}
但是,如果我将所有输入值都放在一个列表中怎么办。我可以这样做吗?
{% cycle my_input_list %}
【问题讨论】:
标签: python django django-templates
django 内置的循环标签不支持传入变量。 不过,您可以制作自己的自定义标签。 这样的事情应该可以工作:
import itertools
from django import template
register = template.Library()
class CycleNode(template.Node):
def __init__(self, cyclevars):
self.cyclevars = template.Variable(cyclevars)
def render(self, context):
names = self.cyclevars.resolve(context)
if self not in context.render_context:
context.render_context[self] = itertools.cycle(names)
cycle_iter = context.render_context[self]
return next(cycle_iter)
@register.tag
def cycle_list(parser, token):
try:
tag_name, arg = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError(
"%r tag requires an argument" % token.contents.split()[0]
)
node = CycleNode(arg)
return node
然后在模板中:
{% cycle_list some_list %}
【讨论】: