我希望能够将POST
重定向中的邮件传递给其他模板。请参阅特定蓝图结构和路径/视图的编辑。
在POST
路线_update_test
之后,它会打印>> about to redirect
然后,我可以通过调试器看到输入了browse_tests
路由并且消息内容符合预期(Flask' redirect()
函数提供的内容。我看到{{1打印到控制台
问题是,在呈现页面>> about to render template
之前,第二次输入base_browse_test.html
路由并且browse_tests
组件已从请求中消失,因此模板呈现为空消息(message
)。我看到在页面呈现之前第二次打印message = ''
。
我在这里缺少什么?
编辑:这是蓝图结构
>> about to render template
:(可以找到此文件的全部内容at this pastebin)
root/webapp/__init__.py
def create_app('development'):
webapp = Flask(__name__)
...
from .mod_tests import tests as tests_blueprint
webapp.register_blueprint(tests_blueprint, url_prefix='/tests')
return webapp
:
root/webapp/mod_tests/__init__.py
from flask import Blueprint
tests = Blueprint('tests', __name__)
from . import manage_tests_views
:
root/webapp/mod_tests/manage_tests_views.py
使用或不使用调试器运行没有任何区别。
@tests.route('/_update_test', methods=['POST'])
def update_test():
...
print 'about to redirect'
return redirect(url_for('tests.browse_tests', message={"main":"foo message content"}))
@tests.route('/browse_tests', methods=['GET'])
@login_required
def browse_tests():
if request.args.get('message'):
message = request.args['message']
else:
message = ''
print 'about to render template'
return render_template('tests/base_browse_tests.html',
message=message)
等于第一个请求中包含request.accept_mimetypes
的{{1}}(邮件完整,请求中包含查询字符串),第二个请求包含MIMEAccept dict
,空查询字符串请求。这有什么线索吗?
('*/*', 1)
字符串值不会改变,虽然dubugger似乎认为它(在我的IDE中将其变为蓝色)
('text/html', 1), ('image/webp', 1), ('application/xhtml+xml', 1), ('application/xml', 0.9), ('*/*', 0.8)
等于request.cookies['session']
。第二个没有通知请求的request.fullpath
等于u'/tests/browse_tests?notification=<encoded json>'
request.fullpath
== u'/tests/browse_tests?'
。第二个是通知缺席请求request.is_xhr
True
首先,第二次请求时不存在。
False
&#39; 1&#39;`第二次请求
答案 0 :(得分:0)
您的蓝图结构或其用法一定有问题
我尝试在没有蓝图的情况下在我的机器上复制你的代码并且它有效!
在您的代码中修改此行并运行,它可能会起作用。 我使用this
发出了POST请求return redirect(url_for('tests.browse_tests', message={"main":"foo message content"}))
return redirect(url_for('.browse_tests', message={"main":"foo message content"}))
这就是我在我的机器上所做的
测试/
---- hello.py
----模板/
-------- base_browse_tests.html
from flask import Flask, redirect, url_for, request, render_template
from flask.ext.login import login_required
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route('/_update_test', methods=['POST'])
def update_test():
print '>>>>>>>>>>>>>>about to redirect'
message={"main":"foo message content"}
return redirect(url_for('browse_tests', message=message ))
@app.route('/browse_tests', methods=['GET'])
def browse_tests():
if request.args.get('message'):
message = request.args['message']
else:
message = ''
print '##################about to render template'
return render_template('base_browse_tests.html',
message=message)
if __name__ == "__main__":
app.run(debug=True)
<h1>Message: {{message}}</h1>
和平
答案 1 :(得分:0)
对不起大家,在该页面上执行的javascript中有一个错误的重定向。让这个提醒要小心。
这个问题可能会被解决,因为解决方案根本不与问题相关。