在外部 Javascript 中使用 Python Flask 传递参数
Pass parameter with Python Flask in external Javascript
我为我的网站使用 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 函数。
<script src="{{ url_for('static', filename='js/myjs.js') }}"></script>
<script>
my_func({{ my_var|tojson }});
</script>
我使用了不同的方式来加载 html 页面中指定的 javascript 文件:
首先,我在 <head></head>
标签内定义了一些变量,所以我将我的 javascript 文件命名为:
<head>
...
<script src="/static/js/jquery.js"></script>
<script type=text/javascript>
$(document).ready(function() {
$link_subcat = "{{ url_for('load_subcategories') }}";
$link_cat = "{{ url_for('load_categories') }}";
});
</script>
<script src="{{ url_for('static', filename='finances.js') }}"></script>
...
这是我的javascript文件内容:
$(document).ready(function() {
$("#category").change(function() {
$.ajax({
type: "POST",
url: $link_subcat,
data: {cat: $(this).val()},
success: function(data) {
$("#subcategory").html(data);
}
});
});
$("input[name=type]").change(function() {
$.ajax({
type: "POST",
url: $link_cat,
data: {type: $('input[name="type"]:checked').val()},
success: function(data) {
$("#category").html(data);
}
});
});
});
这种方法适合我。
我为我的网站使用 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 函数。
<script src="{{ url_for('static', filename='js/myjs.js') }}"></script>
<script>
my_func({{ my_var|tojson }});
</script>
我使用了不同的方式来加载 html 页面中指定的 javascript 文件:
首先,我在 <head></head>
标签内定义了一些变量,所以我将我的 javascript 文件命名为:
<head>
...
<script src="/static/js/jquery.js"></script>
<script type=text/javascript>
$(document).ready(function() {
$link_subcat = "{{ url_for('load_subcategories') }}";
$link_cat = "{{ url_for('load_categories') }}";
});
</script>
<script src="{{ url_for('static', filename='finances.js') }}"></script>
...
这是我的javascript文件内容:
$(document).ready(function() {
$("#category").change(function() {
$.ajax({
type: "POST",
url: $link_subcat,
data: {cat: $(this).val()},
success: function(data) {
$("#subcategory").html(data);
}
});
});
$("input[name=type]").change(function() {
$.ajax({
type: "POST",
url: $link_cat,
data: {type: $('input[name="type"]:checked').val()},
success: function(data) {
$("#category").html(data);
}
});
});
});
这种方法适合我。