【问题标题】:Passing a list from peewee to jinja2 in flask在烧瓶中将列表从 peewee 传递到 jinja2
【发布时间】:2013-04-16 06:50:01
【问题描述】:

我正在尝试编写一个 Flask 应用程序来查询我的数据库(使用 peewee),并将结果发送到 Jinja2 进行渲染。我的观点是这样的:

@application.route('/maindash')
def maindash():
    sq = Selfreported.select().join(Demog).where(Demog.mrn == session['mrn']).order_by(Selfreported.reportingdate)
    series1data = ["Series 1", ([s.reportingdate, s.series] for s in sq)]
    jsonedData = json.dumps(series1data)

    return render_template('maindash.html', seriesdata=jsonedData)

要将查询结果传递给 Jinja2,我知道我需要序列化数据。但是当我调用 json.dumps: TypeError: at 0x104854be0> is not JSON serializable。所以我想我实际上并没有获取数据,而是试图序列化查询对象本身?

我看过的每个 peewee 示例都使用 peewee-flask 中的 object_list 辅助函数,而不是将查询结果直接传递到 render_template。我看过 object_list,但我很难理解它——

def object_list(template_name, qr, var_name='object_list', **kwargs):
kwargs.update(
    page=int(request.args.get('page', 1)),
    pages=qr.count() / 20 + 1
)
kwargs[var_name] = qr.paginate(kwargs['page'])
return render_template(template_name, **kwargs)

我应该使用 QueryResultWrapper 上的方法来获取实际数据而不是对象吗?我看过 tuples() 和 dict(),但我无法遍历它们。

【问题讨论】:

    标签: python flask jinja2 peewee


    【解决方案1】:

    没有理由在将数据传递给 Jinja 之前对其进行序列化,因为 Jinja 是用 Python 编写的,可以处理 Flask 可以处理的任何事情。只需将 series1data 传递到您的 render_template 调用中,然后在您的模板中遍历它:

    return render_template('maindash.html', seriesdata=series1data)
    

     

    {# maindash.html #}
    {% for reportingdate, series in seriesdata[1] %}
        {{ reportingdate }} - {{ series }}<br>
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多