所以我试图使用flask从一个html页面传递一个值到另一个页面。我写的代码看起来像这样:
from flask import Flask, render_template
from flask import request, session, url_for,abort,redirect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'oh_so_secret'
@app.route('/'):
def first():
session['this_one']='hello'
render('template.html')
@app.route('/second')
def second():
it=session['this_one']
render('other_page.html')
if __name__ == '__main__':
app.run(debug=True)
但是当我运行这个时,我得到一个KeyError:this_one
。
所以,今天它重新启动了系统。然后我做了一些改变:
@app.route('/'):
def first():
session['this_one']='goodbye'
render('template.html')
@app.route('/second')
def second():
it=session['this_one']
render('other_page.html')
,第二个功能仍在返回hello
。
所以似乎session
字典没有像我希望的那样被覆盖。
这是一个真正的谜,它有一天工作而不是下一个没有做出任何改变。现在在溃败('/')
我正在设置一个列表:
@app.route('/'):
def first():
session['this_one']='hello'
session['a_list']=['a','b','c']
render('template.html')
使用print命令在第二个函数中调用它:
@app.route('/second')
def second():
it=session['this_one']
print(session['a_list'])
render('other_page.html')
并返回一个空列表[]
。
答案 0 :(得分:2)
假设代码中的所有格式错误都只是拼写错误,那么您的代码就会按预期运行。
from flask import Flask, session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'oh_so_secret'
@app.route('/')
def first():
session['this_one'] = 'hello'
return 'Hello was saved into session[this_one].'
@app.route('/second')
def second():
return 'Value inside session[this_one] is {}.'.format(session['this_one'])
if __name__ == '__main__':
app.run(debug=True)
http://127.0.0.1:5000/
,您将获得:Hello was saved into session[this_one]
。http://127.0.0.1:5000/second
,您将获得:Value inside session[this_one] is hello
。这取自会议。答案 1 :(得分:2)
您的代码工作正常(除了缩进问题,我认为这是拼写错误而不是实际代码)。必须发生的是在第一页之前访问的第二页。您可以使用异常处理来检查KeyError并在遇到第一页时重定向到第一页。
答案 2 :(得分:2)
在我的头撞到桌子两周后,我发现错误,我正在渲染错误的页面..我的原始代码实际上看起来像:
from flask import Flask, render_template
from flask import request, session, url_for,abort,redirect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'oh_so_secret'
@app.route('/'):
def pre-first():
return render_template('template_old.html')
@app.route('/first'):
def first():
greeting=request.form['greeting']
session['this_one']=greeting
render('template.html')
@app.route('/second')
def second():
it=session['this_one']
render('other_page.html')
if __name__ == '__main__':
app.run(debug=True)
将第一个函数更改为:
@app.route('/'):
def pre-first():
return render_template('template.html')
它有效。
答案 3 :(得分:1)
我遇到了同样的错误。我的烧瓶应用程序使用flask-login 0.4.1在我的测试服务器上运行良好。但是,当我迁移到开发服务器时,在会话中找不到keyerror'user_id'。我惊讶为什么会给出此错误,因为相同的代码在我的测试服务器上能正常工作。后来,经过调查,我发现生产服务器正在使用flask-login 0.5.0更新了一些导致错误的默认值。因此,我将flask-login版本降级为0.4.1,然后重新启动了apache服务器,然后我的应用程序运行正常。