通常我做了很多次都没有问题,但现在不同了,我不知道为什么。
我只是想用Flask和Jinja2在html页面上显示一个列表。
这是我的一段代码。
__init__.py
bpPortfolioList = Blueprint('portfolio', __name__)
@bpPortfolioList.route('/list', methods=['GET', 'POST'])
@is_log_in
def plist():
portfolio = None
if session['profile'] == 1:
print('agent')
portfolio = mongo.db.users.find({"agentid": session['userid']}, {"portfolio": 1})
for p in portfolio:
print(p)
return render_template('portfolio/list.html', portfolios=portfolio)我已经捕获了portfolio的输出,结果如下:
{'_id': 10, 'portfolio': {'id': 8476, 'description': '', 'mode': 'Closed', 'accounts': [{'id': 123456, 'account_type': 'None', 'category': '1', 'owner': None, 'ratio': 100, 'status': '1'}]}}
{'_id': 1}
{'_id': 11, 'portfolio': {'id': 4983, 'description': '', 'mode': 'Closed', 'accounts': []}}
{'_id': 13, 'portfolio': {'id': 1226, 'description': '', 'mode': 'Closed', 'accounts': []}}
{'_id': 15, 'portfolio': {'id': 8786, 'description': '', 'mode': 'Closed', 'accounts': []}}
{'_id': 19, 'portfolio': {'id': 7995, 'description': '', 'mode': 'Closed', 'accounts': []}}然后HTML:
<tbody>
{% for p in portfolios %}
<tr>
<td>{{ p.id }}</td>
<td>{{ p.mode }}</td>
{% for c in p.accounts %}
<td>{{ c.id }}</td>
<td>{{ c.status }}</td>
<td>{{ c.ratio }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>在结果中,除了表头之外,我什么也没有得到
知道问题出在哪里吗?
谢谢你的帮助。
发布于 2019-05-02 10:04:13
问题不在于jinja2,而在于您处理查询结果的方式。pymongo的find方法返回一个Cursor类型的对象,它的行为有点像迭代器,即一旦使用它一次,它就会耗尽,无法再次迭代。This answer可能会帮助您理解Cursor类型是如何工作的。因此,要使其工作,只需将查询结果转换为list即可
portfolio = list(mongo.db.users.find({"agentid": session['userid']}, {"portfolio": 1}))
发布于 2019-05-06 14:38:03
我只是发现db中的一些文档缺少属性,但如下所示:
公文包丢失,帐户也是emtpy。
{'_id': 10, 'portfolio': {'id': 8476, 'description': '', 'mode': 'Closed', 'accounts': [{'id': 123456, 'account_type': 'None', 'category': '1', 'owner': None, 'ratio': 100, 'status': '1'}]}}
**{'_id': 1}**
{'_id': 11, 'portfolio': {'id': 4983, 'description': '', 'mode': 'Closed', 'accounts': []}}通过添加以下代码,它解决了我的问题:
new_pf = []
for p in pf:
if 'portfolio' in p:
if 'accounts' in p['portfolio'] and p['portfolio']['accounts']:
new_pf.append(p)多谢你们的支持
https://stackoverflow.com/questions/55944581
复制相似问题