1

我正在自动生成一个本地 HTML 文件,我需要的所有相关数据都在 Python 脚本中。如果没有网络服务器,我不确定如何继续,否则我认为 AJAX/json 解决方案是可能的。

基本上在 python 中,我有一些列表和字典对象,我需要使用它们来使用 javascript 和 HTML 创建图形。我拥有的一种解决方案(真的很糟糕)是使用字符串从 Python 中逐字编写 HTML/JS,然后保存到文件中。

我还能在这里做什么?我很确定 Javascript 没有文件 I/O 功能。

谢谢。

4

6 回答 6

4

您只需要将您在 python 代码中的数据转换为您的 javascript 可读的形式,对吗?

为什么不直接获取数据结构,将其转换为 JSON,然后编写一个.js文件包含在您的.html文件中,这很简单var data = { json: "object here" };

于 2012-07-18T17:49:37.767 回答
1

你对使用一些模板系统有什么看法?它将满足您的需求。

于 2012-07-18T17:41:15.293 回答
1

我知道您已经特别提到了“没有网络服务器”,但除非您真的想摆脱困境,并且过于复杂化,并限制未来使用的灵活性:-

您不能使用非常简单的网络服务器,例如:http ://docs.python.org/library/simplehttpserver.html吗?这样,如果您需要公开该站点,您就已经准备好 URL 以设置适当的网络服务器。

于 2012-07-18T17:45:59.717 回答
1

也许您可以写入 cookie,然后通过 JavaScript 访问它?类似于这里的SO答案

于 2012-07-18T17:47:30.560 回答
1

您可以使用 Python 的 JSON 编码器和解码器库。通过这种方式,您可以将 Python 数据编码为 JSON 格式,并将其包含在 HTML 文档中。然后,您将在 HTML 文件中使用 Javascript 来处理 JSON 编码数据。

http://docs.python.org/library/json.html

于 2012-07-18T17:48:52.477 回答
0

如果这只需要用于本地主机,您可以执行以下操作。要访问,您可以拨打电话http://localhost:8080/foo;但是,由于跨站点注入保护,这可能会导致一些问题;这些很容易通过谷歌搜索解决。

在 JS 方面,你会像这样进行 AJAX 调用(假设是 jQuery)

$.ajax('http://localhost:8080/foo', function (data) {console.log(data)});

然后在 Python 端,您会将此文件放在与您要在计算机上使用的 html 文件 (index.html) 相同的目录中,然后执行它。

import BaseHTTPServer
import json

class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
        def do_GET(self):
            desiredDict = {'something':'sent to JS'}
            if self.path == '/foo':
                self.send_response(200)
                self.send_header("Content-type", "application/json")
                self.end_headers()
                self.wfile.write(json.dumps(desiredDict))
            else: 
                if self.path == '/index.html' or self.path == '/':
                    htmlFile = open('index.html', 'rb')
                    self.send_response(200)
                    self.send_header("Content-type", "text/html")
                    self.send_header("Access-Control-Allow-Origin","http://localhost:8080/")
                    self.end_headers()
                    self.wfile.write(htmlFile.read())
                else:
                    self.send_error(404)

server = BaseHTTPServer.HTTPServer(('',8080), WebRequestHandler)
server.serve_forever()
于 2012-07-18T18:01:13.947 回答