2015-11-10 63 views
2

我想在Django模板中使用python生成器,這可能嗎?如何在django模板中使用生成器方法?

例如,我有模型,它包含如圖波紋管發電機對象,

class TestMe(models.Model): 
    @property 
    def gen(self): 
     yield 1 
     yield 2 

上下文[ '根'] =根

然後在模板,

{{ gen }} # it should be print 1 
    {{ gen }} # it should be print 2 

在不使用for循環

我已經試過這種方式,但它返回的python生成器不是1。任何人都有這個想法。

回答

2

在模板

{{ gen.next }} 
{{ gen.next }} 
+0

好的答案!不幸的是,這在Python 3中不起作用,您可以在其中調用'next(gen)'而不是'gen.next()'。 – Alasdair

1

生成器返回一個迭代器,所以你可以遍歷它。

在Python:

for value in context.gen: 
    print(value) 

或者在Django模板:

{% for value in context.gen %} 
{{ value }} 
{% endfor %} 
+0

這是有點棘手,兩個代碼塊有不同的地方。我想在兩個代碼塊中使用這個。沒有使用for循環我想在Django中使用生成器。 – dhana

+0

目前尚不十分清楚您要做什麼,請更新您的問題並提供更多詳細信息。 – Alasdair

+0

我已更新,我不能在django模板中使用for循環。我需要像''next''一樣迭代gen對象,而不需要for循環 – dhana

0

我已經使用了自定義過濾器,

@register.filter(name='dj_iter') 
def dj_iter(gen): 
    try: 
     return next(gen) 
    Except StopIteration: 
     return 'Completed Iteration' 

在Django的模板,我使用的過濾器

{{ gen|dj_iter }}