在jinja模板中,我的代码是这样的,我试图从我的MongoDB数据库中获取值
{% for a in output %}
{{ a.product_name }}
{% else %}
<p> No product found </p>
{% endfor %}
Some HTML CODE
{% for b in output %}
{{ b.product_name }}
{% endfor %}
问题是第一个循环工作正常,但第二个循环完全没有工作。但是当我在第一个循环之前编写第二个循环时,第二个循环工作,然后不是第一个循环(它进入其他内部并打印&#34;没有找到产品&#34;)。
我无法理解这个问题。
答案 0 :(得分:3)
您想要两次迭代mongodb游标。因此,在第一次迭代之后,您需要在两个循环之间的某个位置调用rewind
(游标)上的output
方法。
output.rewind()
我不确定你是否能够在Jinja模板中做到这一点。
所以更好的选择是将pymongo游标对象转换为列表本身,这样你就可以多次迭代。
output_as_list = list(output)
现在,您应该能够按照预期的方式在代码中使用output_as_list
。
答案 1 :(得分:2)
看起来output
是iterator。尝试将其转换为视图函数中的list
(或dict
)。
您可以通过下一个代码重现此类行为:
output = (x for x in range(3))
# output = list(output) # if uncomment this line, the problem will be fixed
for x in output: # this loop will print values
print(x)
for x in output: # this loop won't
print(x)
UPD:由于output
是mongodb游标,您可以通过调用模板中的output.rewind()
directly来回放它。
{% for a in output %}
{{ a.product_name }}
{% else %}
<p> No product found </p>
{% endfor %}
Some HTML CODE
{% set _stub = output.rewind() %} {# use a stub to suppress undesired output #}
{% for b in output %}
{{ b.product_name }}
{% endfor %}