Python 如何在django模板中使用生成器方法?
我想在django模板中使用python生成器,可以吗 例如,我有一个模型,它包含生成器对象,如下所示Python 如何在django模板中使用生成器方法?,python,django,Python,Django,我想在django模板中使用python生成器,可以吗 例如,我有一个模型,它包含生成器对象,如下所示 class TestMe(models.Model): @property def gen(self): yield 1 yield 2 上下文['gen']=gen 然后在模板中 {{ gen }} # it should be print 1 {{ gen }} # it should be print 2 不使用for循环 我尝
class TestMe(models.Model):
@property
def gen(self):
yield 1
yield 2
上下文['gen']=gen
然后在模板中
{{ gen }} # it should be print 1
{{ gen }} # it should be print 2
不使用for循环
我尝试过这种方法,但它返回的是python生成器,而不是1。任何人都知道这一点。生成器返回一个iterable,因此您可以在其上循环 在Python中:
for value in context.gen:
print(value)
或者在Django模板中:
{% for value in context.gen %}
{{ value }}
{% endfor %}
模板中
{{ gen.next }}
{{ gen.next }}
我使用了自定义过滤器
@register.filter(name='dj_iter')
def dj_iter(gen):
try:
return next(gen)
except StopIteration:
return 'Completed Iteration'
在django模板中,我使用了过滤器
{{ gen|dj_iter }}
这有点棘手,两个代码块位于不同的位置。我想在两个代码块中使用这个。如果不使用for-loop,我想在django中使用generator。不太清楚您想做什么,请更新您的问题并提供更多详细信息。我已更新,我无法在django模板中使用for-loop。我需要迭代gen对象,比如
next
without for loopEchoUA团队的答案将在python2中工作。对于Python3,我认为您必须编写一个自定义模板标记。是的,我编写了自定义过滤器。回答得好!不幸的是,这在Python3中不起作用,在Python3中调用next(gen)
而不是gen.next()
。事实上,dhana的答案更好,解决了我的问题。