2014-12-15 19 views
5

I self.render bin mit einem HTML-Template zu machen, die auf den Informationen von dem Client über Ajax in der def post() Methode wie folgt erhalten abhängt:Tornado Umleitung auf Seite mit Parametern

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

dies nicht der Fall ist jedoch Leite den Benutzer auf die HTML-Seite 'tasks.html' um.

Jedoch habe ich in meiner Konsole einen Status sehen:

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

Wo/Aufgaben "ist ein Alias ​​für tasks.html

Warum sollte dies umgeleitet werden, nicht wahr?

Oder wie können Daten von Ajax, dann verwendet werden, um auf die Seite tasks.html zusammen mit allen Parametern in der oben genannten self.render Anfrage weitergeleitet werden?

+0

Warum sollte es umgeleitet werden? Was in diesem Code würden Sie denken, würde umleiten? –

+0

Das 'render', ich dachte, würde es umleiten – user94628

+0

Nun, das ist, was ich gefragt habe. Warum denkst du das? "Rendern" und "Umleiten" bedeuten ganz andere Dinge. –

Antwort

6

"render" leitet den Browser eines Besuchers niemals zu einer anderen URL um. Es zeigt dem Browser den Inhalt der Seite, die Sie rendern, in diesem Fall die Vorlage "tasks.html".

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

Mehr Informationen in the redirect documentation:

den Browser umzuleiten.

So leiten Sie eine AJAX-Antwort verwenden, versuchen Sie die Zielposition von Python zu Javascript Senden:

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

Dann in Ihren AJAX-Antwort-Handler in Javascript:

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

Mehr über URL-Codierung an ist this answer.

+0

Danke ..... aber auch dies wird nicht auf tasks.html umgeleitet – user94628

+0

Sie verwenden das Wort "Redirect" nicht korrekt. Eine "Weiterleitung" ändert die Adresse, die in der Adressleiste des Browsers angezeigt wird. Was der Funktionsaufruf "render" tut, zeigt dem Benutzer den Inhalt von "tasks.html" an. Was versuchst du zu machen? Wie funktioniert es nicht? –

+0

Was ich versuche ist, eine Ajax-Anfrage wird vom Client mit der ID einer bestimmten Aufgabe erhalten. Ich möchte dann den Benutzer an die tasks.html senden, die mit bestimmten Aufgabendaten gefüllt ist, die spezifisch für die ID sind, die ich als Parameter in der Methode self.render sende. – user94628

Verwandte Themen