将变量从 Flask (python) 传递到与 HTML 文件分开的 Javascript 文件中

Posted

技术标签:

【中文标题】将变量从 Flask (python) 传递到与 HTML 文件分开的 Javascript 文件中【英文标题】:Passing variables from Flask (python) into a Javascript file separate from the HTML file 【发布时间】:2013-12-12 16:25:39 【问题描述】:

我知道您可以通过在 Python 文件中包含 return render_template('index.html', variable=newvariable) 来简单地从 Flask 调用变量,并且

<script>
var JSVAR = ' newvariable ';
</script>

在 index.html 文件中。但是,如果我想将该变量传递给 index.html 文件中包含的纯 javascript 文件怎么办?我想我需要使用 id 参数创建一个 HTML“变量”,然后使用 jQuery 来调用它,但我不知道语法。

有什么想法吗?

【问题讨论】:

【参考方案1】:

公开一个函数并对其进行 ajax 调用并不是一个坏方法。这种方法的好处是可以为维护者留下清晰的函数调用轨迹。

http://api.jquery.com/jQuery.ajax/

http://flask.pocoo.org/docs/patterns/jquery/

第二个链接有更详细的描述,但总体思路是您设置了一个 Flask 应用程序来处理来自浏览器的请求,并在该应用程序中设置一个可以向其发送请求的方法关心将你的变量传回给 js 客户端。

然后在 js 脚本中对该方法的 url 进行 ajax 调用,并有一个处理响应的回调函数。这种方法可以做一些非常非常酷的事情。

如果您不熟悉 ajax,Google 一些教程可能会很有用。作为概述,这一点还不错:http://www.tutorialspoint.com/ajax/ajax_in_action.htm

【讨论】:

谢谢,我正在研究 AJAX。您能否更清楚地了解哪个代码在哪里?我是否在 index.html 文件的 所以基本上,在我的 javascript 文件中,我有一个函数可以发出 ajax 请求并调用服务器告诉它应该有什么?就像我的 javascript 文件中有 var url = "validate?id=" + escape(target.value) 一样,我的 Flask 文件中应该有 @('/validate?id=&lt;myID&gt;') 吗? 你明白了。通过“公开”,他的意思是“创建映射到视图功能的路线”,如@app.route('/validate')。当然,在烧瓶中,您可以通过requests.args.get('id', '') 的请求对象访问查询参数。快速入门指南 roicheer 中有一段很好的段落:flask.pocoo.org/docs/quickstart/#the-request-object 你真的不应该通过模板引擎将变量传递到你的嵌入式javascript中。这很快就会变得一团糟。走 AJAX 路线是更好的选择。【参考方案2】:

刚刚遇到同样的问题,这就是我所做的

from jinja2.environment import Template

def render_js():
    file_content = open(path_to_jsfile, 'r').read()
    template = Template(file_content)
    return template.render(arg1='value1', arg2='value2')

【讨论】:

以上是关于将变量从 Flask (python) 传递到与 HTML 文件分开的 Javascript 文件中的主要内容,如果未能解决你的问题,请参考以下文章

在渲染模板中将变量从python(flask)传递给HTML?

将参数从Javascript传递到flask python脚本[重复]

python的flask框架下不同路由之间传递变量的一种办法

python的flask框架下不同路由之间传递变量的一种办法

Python3 Flask 路由变量显示为变量名而不是从邮递员传递的值

使用 Flask 中的会话传递变量时出现键错误