Jinja2 模板处理器通常在 Flask 应用程序中使用,仅适用于模板文件。您正在通过以下方式导入 JavaScript<script>
元素。模板处理器不会看到该 JavaScript。如果您将 JavaScript 直接放入 HTML 文件中,它将由 Jinja2 处理。例子:
<script>
function test(){
var mvt = document.getElementById('movieThumbnail')
var ig = document.createElement('img')
ig.src = `{{url_for('static', filename='data/haron_4.png')}}`
mvt.append(ig)
}
</script>
您可以做的是使用这个简单的脚本将静态文件夹存储在窗口变量中,并在脚本中使用它。例子:
<script>
window.static_folder = "{{url_for('static')}}";
</script>
然后在脚本中引用全局变量。粗略的例子:
function test(){
const mvt = document.getElementById('movieThumbnail');
const ig = document.createElement('img');
ig.src = `${window.static_folder}/data/haron_4.png`;
mvt.append(ig);
}
或者,您可以调用 Flask 服务器上的 api 来获取url_for
。请看这个例子:
@bp.route('/url_for/')
def public_get_url_for():
"""
get the url using the url_for method. url parameters are given as request args
ie: /url_for?endpoint=stock_edit&stock_id=12
example:
$.get({
url: '/url_for',
data: {endpoint: 'stock_edit', stock_id: $('#stock_id').val()}
}).then(url => window.location = url);
for route:
@app.route('/stock_edit/<int:stock_id>')
def stock_edit(stock_id):
# some code
:return: the url or 404 if error
"""
keywords = request.args.to_dict()
try:
return url_for(**keywords)
except Exception as e:
return str(e), 404