2014-12-15 16 views
5

Używam self.render renderować szablon HTML, który jest uzależniony od informacji otrzymanych od klienta za pośrednictwem AJAX w metodzie def post() tak:Tornado przekierowanie do strony z parametrami

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='') 

Jednak to nie przekieruj użytkownika na stronę html "tasks.html".

Jednak widzę w mojej konsoli status:

[I 141215 16:00:55 web:1811] 200 GET /tasks (127.0.0.1) 

Gdzie '/ zadania' jest aliasem dla tasks.html

Dlaczego nie miałoby to być przekierowany?

Albo w jaki sposób dane otrzymane z ajax'a mogą zostać wykorzystane do przekierowania na stronę tasks.html wraz ze wszystkimi parametrami podanymi w powyższym zgłoszeniu self.render?

+0

Dlaczego powinien zostać przekierowany? Jak myślisz, w jaki sposób kodowałbyś przekierowanie? –

+0

"Renderuj", myślałem, że to przekierujemy. – user94628

+0

Cóż, właśnie o to pytałem. Dlaczego tak myślisz? "renderowanie" i "przekierowanie" oznaczają całkiem różne rzeczy. –

Odpowiedz

6

"Wyrenderuj" nigdy nie przekierowuje przeglądarki użytkownika do innego adresu URL. Pokazuje on przeglądarkę, którą wyrenderowałeś, w tym przypadku szablon "tasks.html".

przekierować przeglądarkę:

@tornado.web.authenticated 
    def post(self): 
     self.redirect('/tasks') 
     return 

Więcej informacji w the redirect documentation.

Aby przekierować za pomocą odpowiedzi AJAX, spróbuj wysłać lokalizację docelową z Pythonie 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=''))) 

Następnie w przewodnika odpowiedzi AJAX w JavaScript:

$.ajax({ 
    url: "url", 
}).done(function(data) { 
    var url = data.location + '?user=' + data.user + '&timestamp=' + data.timestamp; // etc. 
    window.location.replace("http://stackoverflow.com"); 
}); 

Więcej informacji na temat kodowania URL w this answer.

+0

Dzięki ..... ale nawet to nie przekierowuje do tasks.html – user94628

+0

Nie używasz poprawnie słowa "przekierowanie". "Przekierowanie" zmienia adres wyświetlany na pasku adresu przeglądarki. To, co wywołuje funkcja "render", pokazuje użytkownikowi zawartość "tasks.html". Co próbujesz zrobić? W jaki sposób to nie działa? –

+0

Co próbuję zrobić, żądanie ajax jest odbierane od klienta z 'id' określonego zadania. Następnie chcę "wysłać" użytkownika do pliku tasks.html, który jest wypełniony danymi konkretnego zadania specyficznymi dla tego "id", które przesyłam jako parametry w metodzie 'self.render'. – user94628

Powiązane problemy