【问题标题】:How to pass a Mongo Cursor object to a Jinja template?如何将 Mongo 光标对象传递给 Jinja 模板?
【发布时间】:2016-10-18 16:44:03
【问题描述】:

我有一个 Mongo 数据库,我想编写一个脚本来执行查询并将结果传递给一个 html 文件。

这个呈现的 html 文件将用作我将发送给我的同事的电子邮件的 html 正文。

但是没有渲染模板,这就是我得到的

我的 html 看起来像这样:

     <table>
        { %for q in query %}
            <tr>
                <td>{{ q['containers'] }} </td>
                <td>{{ q['cases'] }} </td>
                <td>{{ q['gross_weight'] }} </td>
                <td>{{ q['volume'] }} </td>
            </tr>
        { %endfor% }
    </table>

虽然我的脚本看起来像这样:

from pymongo import MongoClient, ASCENDING
from jinja2 import Template

def main():

    client = MongoClient()
    collection = client.supplyChain['commonRegimes']

    parameters = {
        'delivery_to_warehouse':None,
        'regime':{'$in':['10', '91']}
    }

    query_result = collection.find(parameters).sort('eta_warehouse', ASCENDING)

    templatefile = open('D:/myScripts/ccreport/reports/templates/nextArrivals.html').read()

    template = Template(templatefile)

    message  = template.render(query = query_result)


if __name__ == '__main__':
    main()

我得到错误:

jinja2.exceptions.UndefinedError: 'q' is undefined

我将不胜感激。

【问题讨论】:

    标签: python mongodb python-2.7 jinja2 pymongo


    【解决方案1】:

    好的,我意识到这是for语句中的语法错误,应该是:

    {% for q in query %}
    
    {% endfor %}}
    

    【讨论】:

    • 但是在 jinja 模板中使用游标会限制传递的模板变量在多个地方的可用性,因为生成器对象只能迭代一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多