2013-10-01 1 views
5

Im Server machen ich eine Vorlage mit einem Argument, wie folgt aus:Wie passieren Argumente von Tornado zu einer js-Datei aber nicht HTML-Format?

self.render('templates/test.html', names="['Jane', 'Tom']") 

Und ich habe es erfolgreich in der <script> von test.html durch diese:

var N = "{{ names }}"; 

Jetzt will ich die js code trennen und html:

<script type="text/javascript" src="static/test.js"></script> 

aber es versäumt, wenn ich diesetzen, dass JS-Datei.

Kann mir jemand sagen, was damit zu tun? Vielen Dank !

Antwort

7

Sie set-Funktion erstellen, um von HTML-Datei aufgerufen werden Argument haben bestanden:

$ tree 
. 
├── static 
│   └── scripts 
│    └── test.js 
├── templates 
│   └── index.html 
└── test.py 

Tornado-Code:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import os.path 
import tornado.httpserver 
import tornado.ioloop 
import tornado.options 
import tornado.web 

from tornado.options import define, options 
define("port", default=8000, help="run on the given port", type=int) 

class IndexHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.render('index.html', test="Hello, world!") 

if __name__ == '__main__': 
    tornado.options.parse_command_line() 
    app = tornado.web.Application(handlers=[ 
     (r'/', IndexHandler)], 
     static_path=os.path.join(os.path.dirname(__file__), "static"), 
     template_path=os.path.join(os.path.dirname(__file__), "templates")) 
    http_server = tornado.httpserver.HTTPServer(app) 
    http_server.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 

Vorlage:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
    <script src="{{ static_url('scripts/test.js') }}" type="application/javascript"></script> 
</head> 
<body> 
    <input type="button" onclick="show_test()" value="alert" /> 
    <script type="application/javascript"> 
     set_test("{{test}}"); 
    </script> 
</body> 
</html> 

JavaScript-Datei:

/* test.js */ 
var test = "" 

function set_test(val) 
{ 
    test=val 
} 

function show_test() 
{ 
    alert(test); 
} 
+0

Gute Idee. Vielen Dank ! – yakiang

Verwandte Themen