我使用self.render
呈现html模板,该模板取决于通过def post()
方法中的ajax从客户端收到的信息,如下所示:
class aHandler(BaseHandler):
@tornado.web.authenticated
def post(self):
taskComp = json.loads(self.request.body)
if taskComp['type'] == 'edit':
if taskComp['taskType'] == 'task':
self.render(
"tasks.html",
user=self.current_user,
timestamp='',
projects='',
type='',
taskCount='',
resName='')
但是,这不会将用户重定向到html页面' tasks.html'。
但是我在我的控制台中看到了一个状态:
[I 141215 16:00:55 web:1811] 200 GET /tasks (127.0.0.1)
在哪里' / tasks'是tasks.html的别名
为什么不会重定向?
或者如何从ajax接收数据,然后用于重定向到tasks.html页面以及上述self.render
请求中提供的所有参数?
答案 0 :(得分:7)
“render”永远不会将访问者的浏览器重定向到其他URL。它会向浏览器显示您呈现的页面的内容,在本例中为“tasks.html”模板。
要重定向浏览器:
@tornado.web.authenticated
def post(self):
self.redirect('/tasks')
return
the redirect documentation中的更多信息。
要使用AJAX响应重定向,请尝试将目标位置从Python发送到Javascript:
class aHandler(BaseHandler):
@tornado.web.authenticated
def post(self):
self.write(json.dumps(dict(
location='/tasks',
user=self.current_user,
timestamp='',
projects='',
type='',
taskCount='',
resName='')))
然后在Javascript中的AJAX响应处理程序中:
$.ajax({
url: "url",
}).done(function(data) {
var url = data.location + '?user=' + data.user + '×tamp=' + data.timestamp; // etc.
window.location.replace("http://stackoverflow.com");
});
有关网址编码的更多信息,请访问this answer。