2013-04-15 40 views
0

我想写一个Flask应用程序,查询我的数据库(使用peewee),并将结果发送到Jinja2进行渲染。我的看法是这样的:通过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:在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的方法?我看过元组()和字典(),但我无法遍历它们。

回答

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 %}