首页 文章

从peewee到烧瓶中的jinja2传递清单

提问于
浏览
0

我正在尝试编写一个查询我的数据库的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>不是JSON可序列化的 . 所以我想我实际上并没有获取数据,而是尝试序列化查询对象本身?

我看过的每个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(),但是我无法迭代它们 .

1 回答

  • 4

    在将数据传递给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 %}
    

相关问题