首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python Flask jinja2模板嵌套mongodb数据游标对象

python Flask jinja2模板嵌套mongodb数据游标对象
EN

Stack Overflow用户
提问于 2019-05-02 09:26:54
回答 2查看 685关注 0票数 0

通常我做了很多次都没有问题,但现在不同了,我不知道为什么。

我只是想用Flask和Jinja2在html页面上显示一个列表。

这是我的一段代码。

代码语言:javascript
复制
__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的输出,结果如下:

代码语言:javascript
复制
{'_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:

代码语言:javascript
复制
 <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>

在结果中,除了表头之外,我什么也没有得到

知道问题出在哪里吗?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-05-02 10:04:13

问题不在于jinja2,而在于您处理查询结果的方式。pymongofind方法返回一个Cursor类型的对象,它的行为有点像迭代器,即一旦使用它一次,它就会耗尽,无法再次迭代。This answer可能会帮助您理解Cursor类型是如何工作的。因此,要使其工作,只需将查询结果转换为list即可

portfolio = list(mongo.db.users.find({"agentid": session['userid']}, {"portfolio": 1}))

票数 3
EN

Stack Overflow用户

发布于 2019-05-06 14:38:03

我只是发现db中的一些文档缺少属性,但如下所示:

公文包丢失,帐户也是emtpy。

代码语言:javascript
复制
{'_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': []}}

通过添加以下代码,它解决了我的问题:

代码语言:javascript
复制
new_pf = []
    for p in pf:
        if 'portfolio' in p:
            if 'accounts' in p['portfolio'] and p['portfolio']['accounts']:
                new_pf.append(p)

多谢你们的支持

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55944581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档