Hi2all! 我有: 1)mongo集合:
PSComputerName
2)带有视图的烧瓶应用程序:
[{_id:ObjectId("5b0d5fb624d22e1b4843c06b")
collectionName:"collection0"
collectionCaption:"caption1"}
{_id:ObjectId("5b0d5fb824d22e1b4843d4c1")
collectionName:"collection1"
collectionCaption:"caption1"}
{_id:ObjectId("5b0d5fb924d22e1b4843d74a")
collectionName:"collection2"
collectionCaption:"caption1"}
{_id:ObjectId("5b0d5fb924d22e1b4843d7b0")
collectionName:"collection3"
collectionCaption:"caption1"}]
3)模板:index.html女性扩展base.html。 base.html文件:
def index():
a = mongo.db.collectionsNames.find()
return render_template('index.html', collectionsNames=a)
的index.html:
{% extends "bootstrap/base.html" %}
{% block content %}
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
{% for asd in collectionsNames %}
<a class="dropdown-item" href="/{{ asd["collectionName"] }}">{{ asd["collectionCaption"] }}</a>
{% endfor %}
</div>
{% block contentBase %} {% endblock %}
{% endblock %}
问题是:为什么如果base和index使用相同的集合变量,索引模板什么都不显示?
但是如果在视图代码中是:
{% extends "base.html" %}
{% block contentBase %}
{% for zxc in collectionsNames %}
{{ zxc["collectionName"] }}
{% endfor %}
{% endblock %}
在模板中我使用不同的变量,索引模板显示数据。
答案 0 :(得分:0)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
返回一个光标:mongo.db.collectionsNames.find()
给出print(mongo.db.collectionsNames.find())
。
为了简化(但有点错误),游标是一种特定类型的实例,它通过块从数据库块中获取数据,因此如果你想要db中的1 000 000个第一项,你实际上并不存储RAM中的1M项目,您可以100个项目(例如)迭代100个项目。光标以神奇的方式处理它。
无论如何,你不能在同一个光标上循环几次,你不应该把光标放到像<pymongo.cursor.Cursor object at 0x7fd3854d5710>
那样的列表中(因为如果你的查询要求提供1M产品,那么这样就可以将所有这些产品添加到RAM中)。 / p>
所以,现在,你怎么能处理这个问题。大多数时候我会说在你需要的时候调用这个方法会更好,如果需要的话可以两次。
但是你在Jinja环境中,如果我在Jinja模板中调用方法是不可能的。
这样做的一种方法是使用属性。
list(cursor_instance)
然后,在您的模板中:
class LazyCollection(object):
@property
def collections_names(self):
return mongo.db.collectionsNames.find()
lazycoll = LazyCollection()
return render_template('index.html', collectionsNames=lazycoll)