Flask - 从重定向传递变量到render_template

3 投票
1 回答
6194 浏览
提问于 2025-04-18 02:27

我有一个关于如何重定向到一个渲染模板的函数的问题。我有两个函数:

@user.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    email = request.form['email']
    if User.query.filter(User.email == email).first() is not None:
        flash('Account already exists for this email address!')
        return redirect(url_for('user.login'))

还有一个

@user.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    return "Hello"

在第一个函数中,我有一行代码 return redirect(url_for('user.login')),我想在重定向的时候把邮箱变量也传过去,这样在第二个函数中用 render_template 就可以在网页上显示这个变量。我尝试了以下方法:

return redirect(url_for('user.login', defaultEmail=email))

在第一个函数中,还有

return render_template('login.html', defaultEmail=email))

但是我遇到了一个错误 NameError: global name 'email' is not defined。我该怎么做才能实现这个呢?

1 个回答

5

url_for 这个函数应该把 email 通过查询字符串传递。这样的话,login 就可以通过 request.args 来获取这个信息。

email = request.args.get('defaultEmail')

撰写回答