我正在使用谷歌应用引擎和谷歌文档/ gdata制作数据绘图工具,并遇到了python / js / html通信问题。
我想要一个非常简单的网页布局 - 只需要一系列下拉菜单部分,然后是最终的图表。我目前的困境涉及下拉菜单。
总共有4个下拉菜单,每个菜单的字段取决于之前的选择。我发现JS / HTML代码具有所有必需的逻辑,但它假定您已预先加载了所有选择字段。由于项目的规模,在启动时无法加载所有内容,数据是动态/更改的,因此我不能仅使用包含的菜单选择数据声明静态文件。
目前,我有方法从谷歌文档(使用gdata)获取我需要的所有菜单选择/数据。理想情况下,我想将每个系列调用(html selection1 - > python method1以获得下一个选择集 - > html selection2 - > python方法2以获得下一个选择集 - >等)但是我可以收集它似乎这是不可能的(返回到python,即'post',而不重新加载整个页面)。
那么,有没有办法在初始模板渲染或没有“发布”后访问google-app-engine JS代码中的python变量/方法?或者,更开放的是,如果有人有洞察力/建议/想法,我会很感激。
由于
答案 0 :(得分:1)
两步过程:
创建一些服务器端代码以将数据作为JSON返回 - 这是在网络上传输数据的事实方法。
在您的javascript代码中,调用您的服务器(从步骤1开始),然后解析结果。使用结果填充下拉列表。
好消息是Google已经将json作为其gdata API的替代格式。有关如何使用gdata和返回JSON的入门知识,请参阅this link。
对于第二部分,几乎所有的javascript客户端库(你真的应该使用一个)提供了一种使用ajax请求数据的简单方法。由于这是一项常见任务,因此StackOverflow上存在大量问题 - this one特别有一个示例,向您展示如何使用jquery和ajax填充下拉列表。
假设您可以使用javascript并复制Python代码提供的任何功能,以上内容将适合您。如果你有一些你不想转移到客户端的特定逻辑,那么你的Python代码必须返回json(实际上,你的行为就像你的javascript代码的gdata api)。
由于您没有突出显示您正在使用的Python框架 - 以下是使用flask的示例,这是一个用于Python Web开发的简单框架:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/the-question')
def the_answer():
return jsonify(answer=42)
AJAX with jQuery下的文档中提供了一个更全面的示例。
如果您使用的是webapp2,Google会提供excellent documentation来执行相同操作。