Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django模板中使用生成器方法?_Python_Django - Fatal编程技术网

Python 如何在django模板中使用生成器方法?

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循环 我尝

我想在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循环


我尝试过这种方法,但它返回的是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的答案更好,解决了我的问题。