如何将参数从龙卷风传递到js文件而不是html?

时间:2022-11-20 23:19:00

In the server I render a template with an argument, like this:

在服务器中,我使用参数渲染模板,如下所示:

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

And I successfully got it in the <script> of test.html by this:

我成功地在test.html的

var N = "{{ names }}";

Now I want to seperate the js code and html :

现在我想分开js代码和html:

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

but it failed when I put the N = "{{ names }}" in that js file.

但是当我把N =“{{names}}”放在那个js文件中时失败了。

Can anyone tell me what to do with that ? Thanks !

谁能告诉我该怎么做?谢谢 !

1 个解决方案

#1


7  

You can create setter function to be called from HTML file to have argument passed:

您可以创建要从HTML文件调用的setter函数以传递参数:

$ 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()

Template:

<!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 file:

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

function set_test(val)
{
    test=val
}

function show_test()
{
    alert(test);
}

#1


7  

You can create setter function to be called from HTML file to have argument passed:

您可以创建要从HTML文件调用的setter函数以传递参数:

$ 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()

Template:

<!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 file:

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

function set_test(val)
{
    test=val
}

function show_test()
{
    alert(test);
}