Tornado重定向到带参数的页面

时间:2014-12-15 16:00:08

标签: python tornado

我使用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请求中提供的所有参数?

1 个答案:

答案 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 + '&timestamp=' + data.timestamp; // etc.
  window.location.replace("http://stackoverflow.com");
});

有关网址编码的更多信息,请访问this answer