用外部Javascript中的Python Flask传递参数 [英] Pass parameter with Python Flask in external Javascript
问题描述
from flask import Flask
from flask import render_template
app = Flask(__ name__)
@ app.route(/)
def index():
return render_template(index.html ,param1 =Hello)
< html>
< head>
< / head>
< body>
< p> Hello World< / p>
< / body>
< script> console.log({{param1}})< / script>
< / html>
通过这种方式,它可以毫无问题地工作。这个例子是我自己的简化。但是,如果我想让脚本在外部文件上,并像这样调用它:
< html>
< head>
< / head>
< body>
< p> Hello World< / p>
< / body>
< script src =/ static / js / myjs.js>< / script>
< / html>
而 myjs.js
文件是 console.log({{param1}})
,那么它不起作用。那么,有什么办法可以通过Python Flask传递外部Javascript文件中的参数?解析方案
如果你想渲染一个文件Jinja,你需要在它上面调用 render_template
,并把它传递给期望的值。直接链接到一个静态文件显然不这样做。一个解决方案是使用Jinja的 include
块。这需要'myjs.js'位于'templates / js'文件夹中,并将其包含在呈现的模板中,将所有模板上下文传递给包含的模板。
< script> {%include'js / myjs.js'%}< / script>
更好的解决方案是不需要在每个请求上呈现js,而是将参数传递给模板中的js函数。
$ b
< script src ={ url_for('static',filename ='js / myjs.js')}}>< / script>
< script>
my_func({{my_var | tojson}});
< / script>
I use Python Flask for my website and I pass several parameters to Javascript. This is my code:
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html", param1="Hello")
<html>
<head>
</head>
<body>
<p>Hello World</p>
</body>
<script>console.log({{param1}})</script>
</html>
With this way, it works without a problem. The example is a simplified of my own. But, if I want to have the script on an external file and call it like this:
<html>
<head>
</head>
<body>
<p>Hello World</p>
</body>
<script src="/static/js/myjs.js"></script>
</html>
And the myjs.js
file is the console.log({{param1}})
, then it doesn't work. So, is there any way to pass parameters in external Javascript files with Python Flask?
If you want to render a file with Jinja, you need to call render_template
on it and pass it the desired values. Just linking directly to a static file obviously doesn't do that. One solution is to use Jinja's include
block. This requires that 'myjs.js' is in the 'templates/js' folder, and will include it in the rendered template, passing all the templates context to the included template.
<script>{% include 'js/myjs.js' %}</script>
The better solution is to not require rendering the js on every request, and instead passing parameters to js functions from your template.
<script src="{{ url_for('static', filename='js/myjs.js') }}"></script>
<script>
my_func({{ my_var|tojson }});
</script>
这篇关于用外部Javascript中的Python Flask传递参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!