Flask 应用程序中常用的 Jinja2 模板处理器仅适用于模板文件。您正在通过 <script> 元素导入 JavaScript。模板处理器不会看到那个 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