Passing a list from peewee to jinja2 in flask
我正在尝试编写一个Flask应用程序,该应用程序查询我的数据库(使用peewee),并将结果发送到Jinja2中进行渲染。我的看法如下:
1 2 3 4 5 6 7 | @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,但很难理解它-
1 2 3 4 5 6 7 | 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()了,但是我无法遍历它们。
因为Jinja是用Python编写的,并且可以处理Flask可以处理的所有内容,所以没有理由在将数据传递给Jinja之前对其进行序列化。只需将
1 | return render_template('maindash.html', seriesdata=series1data) |
1 2 3 4 | {# maindash.html #} {% for reportingdate, series in seriesdata[1] %} {{ reportingdate }} - {{ series }} {% endfor %} |