Как передать запрос к render_template в формате json? - PullRequest
0 голосов
/ 21 июня 2019

Уже давно я пытаюсь представить список словарей как вывод json.

вот мой model.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("_")])

и в view.py:

@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)

в search.html:

{% extends "layout.html" %}
{% block content %}
     {% for result in results %}
          <li>{{ result }}</li>
     {% endfor %}
{% endblock content %}

Вопрос:

Мой вопрос заключается в том, как показать список словарей в моем html-шаблоне в формате json.

Я знаю, что с return jsonify(results) у меня может быть маршрут со списком форматов json, но как привести его к чему-то вроде return render_template('search_results.html', results=json.dumbs(results))

Ожидание:

Я ожидаю что-то вроде:

[
  {'id': 1,
   'username ': JackS,
   'email':'demo@gmail.com'},
  {'id': 2,
   'username ': RossS,
   'email':'x@gmail.com'},
  ....
]

1 Ответ

0 голосов
/ 21 июня 2019

Добавьте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...