Визуализация шаблона Jinja во Flask после ответа ajax

Это мое первое погружение в Flask + Jinja, но в прошлом я много использовал HandlebarsJS, поэтому знаю, что это возможно, но не уверен, как это реализовать с помощью Flask:

Я создаю приложение: пользователь вводит строку, которая обрабатывается с помощью скрипта python, и результат возвращается ajax в шаблон клиента / Jinja.

Я могу вывести результат с помощью $ ("body"). Append (response), но это будет означать, что мне нужно написать какой-нибудь неприятный html внутри добавления.

Вместо этого я хотел бы визуализировать другой шаблон после обработки результата и добавить этот новый шаблон в исходный шаблон.

Это возможно?

Мой питон:

from flask import Flask, render_template, request, jsonify

from script import *

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/getColors')
def add_colors():

    user = request.args.get("handle", 0, type = str)

    return jsonify(
        avatar_url = process_data(data)
    )

if __name__ == '__main__':
    app.run()

person fhbi    schedule 12.02.2015    source источник


Ответы (1)


Нет правила о том, что ваши маршруты ajax должны возвращать JSON, вы можете возвращать HTML точно так же, как вы это делаете для своих обычных маршрутов.

@app.route('/getColors')
def add_colors():

    user = request.args.get("handle", 0, type = str)

    return render_template('colors.html',
                           avatar_url=process_data(data))

Ваш colors.html файл не обязательно должен быть полной HTML-страницей, это может быть фрагмент HTML, который вы хотите, чтобы клиент добавил. Итак, все, что нужно сделать клиенту, - это добавить тело ответа ajax к соответствующему элементу в DOM.

person Miguel    schedule 12.02.2015
comment
Как добавить новый шаблон ('colors.html') в div с помощью jquery? Я знаю, как это сделать с помощью json, но у меня проблемы с загрузкой внешней html-страницы. Ваш совет будет очень признателен. - person chemist; 09.01.2016
comment
@chemist Просто сделайте myDiv.innerHTML += htmlResponse, где htmlResponse - это визуализированный HTML-код, возвращенный вашим вызовом ajax для Flask. Я знаю, что это запоздалый ответ, но он может быть полезен другим, пришедшим сюда из Google (например, мне). - person Dotl; 05.09.2017