用外部Javascript中的Python Flask传递参数 [英] Pass parameter with Python Flask in external Javascript

查看:133
本文介绍了用外部Javascript中的Python Flask传递参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为我的网站使用了Python Flask,并将几个参数传递给了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆