如何将查询作为json格式传递给render_template?

时间:2019-06-21 15:30:40

标签: python json flask-sqlalchemy

已经有一段时间我试图将字典列表表示为json输出。

这是我的模型。py:

$s = '{1|{1078} {*|{1079}-}test{1|{4829}, test2 {4457}}} {*|{1078} {*|{1079}-}test3{1|{4829}, test4 {23232}}}';
if (preg_match_all('~\|\{(\d+)}~', $s, $matches)) {
    print_r(array_unique($matches[1]));
}
// => Array ( [0] => 1078 [1] => 1079  [2] => 4829 )

和view.py:

class User(db.Model):
    """
        class to create users
    """

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def to_dict(self):
        return dict([(k, getattr(self, k)) for k in self.__dict__.keys() if not k.startswith("_")])

在search.html中:

@app.route('/user', methods=['GET', 'POST'])
def search():

    datas = User.query.all()
    results = []
    for result in datas:
        results.append(result.to_dict())

    if request.method == 'POST':
        query = request.form['Search']
        return redirect((url_for('search_results', query=query)))
    return render_template('search_results.html', results=results)

问题:

我的问题是,如何在我的html模板中以json格式显示字典列表。

我知道使用{% extends "layout.html" %} {% block content %} {% for result in results %} <li>{{ result }}</li> {% endfor %} {% endblock content %} 可以使用一条包含json格式列表的路由,但是如何将其置于类似return jsonify(results)的位置

期望:

我希望这样:

return render_template('search_results.html', results=json.dumbs(results))

1 个答案:

答案 0 :(得分:0)

向您的toJSON模型添加User方法

  def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True)

现在您可以使用json.dumps从查询集结果创建JSON字符串格式

return render_template('search_results.html', results=json.dumps(results)