【问题标题】:Rendering Jinja template in Flask following ajax response在 ajax 响应之后在 Flask 中渲染 Jinja 模板
【发布时间】:2015-04-13 18:05:32
【问题描述】:

这是我第一次深入了解 Flask + Jinja,但我过去经常使用 HandlebarsJS,所以我知道这是可能的,但我不确定如何使用 Flask 来实现:

我正在构建一个应用程序:用户输入一个字符串,该字符串通过 python 脚本处理,结果通过 ajax 回传到客户端/Jinja 模板。

我可以使用 $("body").append(response) 输出结果,但这意味着我需要在 append 中编写一些讨厌的 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()

【问题讨论】:

    标签: javascript python ajax flask jinja2


    【解决方案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的sn-p。因此,客户端需要做的就是将 ajax 响应的主体附加到 DOM 中的适当元素。

    【讨论】:

    • 如何使用 jquery 将新模板('colors.html')附加到 div?我知道如何使用 json 来做到这一点,但在加载外部 html 页面时遇到问题。非常感谢您的建议。
    • @chemist 只需执行myDiv.innerHTML += htmlResponse,其中htmlResponse 是从您对Flask 的ajax 调用返回的渲染html。我知道这是一个迟到的回应,但它可能对从谷歌来到这里的其他人(比如我)有用。
    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2020-11-17
    • 2015-11-24
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多