如何在烧瓶中传递返回重定向(url())的参数

时间:2020-04-05 08:43:07

标签: python python-3.x flask jinja2

我正在尝试更新flask中的配置文件。一切正常,但是当我给出{{msg11}}时,一旦它编辑的msg不会显示在html页面中。我不知道如何传递参数,以便味精将显示在html页面中。我尝试了这种方法,但是它没有显示在html页面中

@app.route("/updateProfile", methods=["GET", "POST"])
def updateProfile():
    if request.method == 'POST':
        email = request.form['email']
        firstName = request.form['firstName']
        lastName = request.form['lastName']
        with sqlite3.connect('database.db') as con:
                try:
                    cur = con.cursor()
                    cur.execute('UPDATE users SET firstName = ?, lastName = ? WHERE email = ?', (firstName, lastName))
                    con.commit()
                    msg11 = "Saved Successfully"
                except:
                    con.rollback()
                    msg11 = "Error occured"
        con.close()
        return redirect(url_for('editProfile', msg11=msg11))

添加editprofile功能。我已删除此函数中的sql查询

def editProfile():
    if 'email' not in session:
        return redirect(url_for('root'))
    loggedIn, firstName, noOfItems = getLoginDetails()

        profileData = cur.fetchone()
    conn.close()
    return render_template("editProfile.html", profileData=profileData, loggedIn=loggedIn, firstName=firstName, noOfItems=noOfItems)

1 个答案:

答案 0 :(得分:0)

当您为url_for函数提供关键字参数时,Flask会自动将您的值编码为URI组件,并将它们附加到您的请求网址中。

以您的代码为例,执行此操作

msg11='Saved Successfully'
return redirect(url_for('editProfile', msg11=msg11))

传递到editProfile路由时将产生此URL

/editProfile?msg11=Saved+Successfully

您可以使用Flask内置的request对象轻松提取该值

from flask import request
# Inside of editProfile() route
msg11 = request.args.get('msg11', None)

这样,您可以简单地检查该值是否存在(调用get()与通常的Python约定相同,如果找不到该值,将返回None)并通过连同您的HTML模板。

此外,使用Jinja的功能,您只能通过使用类似这样的方式显示消息,除非该消息不是None

{% if msg11 is not none %}
<h1>{{ msg11 }}</h1>
{% endif %}

下面是一个完整的最小示例

app.py

from flask import Flask, render_template, redirect, url_for, request

app = Flask(__name__)

@app.route("/updateProfile", methods=["GET", "POST"])
def updateProfile():
    msg11 = "Saved Successfully"
    return redirect(url_for("editProfile", msg11=msg11))

@app.route("/editProfile")
def editProfile():
    msg11 = request.args.get("msg11")
    return render_template("editProfile.html", msg11=msg11)

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

templates/editProfile.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>editProfile</title>
</head>
<body>
    {% if msg11 is not none %}
    <h1>{{ msg11 }}</h1>
    {% else %}
    <h1>msg11 has a value of None</h1>
    {% endif %}
</body>
</html>