Flask静态文件夹在带参数的页面上无法工作
我的静态文件在所有页面上都能正常工作,除了当某个页面需要参数的时候。以下是我的代码:
文件夹结构:
[WEB]
myApp.py
[templates]
test.html
[static]
[img]
my_image.png
Flask 应用:
from flask import Flask, redirect
from Cheetah.Template import Template
app = Flask(__name__, static_folder='static')
app.config.from_object(__name__)
app.secret_key = 'THIS_WILL_BE_SOME_RANDOM_KEY'
app.debug = True
@app.route('/')
def main_route():
return redirect('/home')
@app.route('/home')
def home():
return str(Template(file="templates/test.html"))
@app.route('/somePage')
@app.route('/somePage/<var>/')
def somePage(var=None):
return str(Template(file="templates/test.html"))
if __name__ == "__main__":
app.run(host="0.0.0.0")
test.html:
<html>
<head>
</head>
<body>
<div><img src="static/img/my_image.png"></div>
</body>
</html>
简单来说,首页和somePage页面应该都能显示同一张图片,通常情况下确实是这样。但是当我给somePage/var传递一个参数时,它找不到静态文件夹,反而去找 /somePage/var/static,结果出现了下面的404错误。
"GET /somePage/var/static/img/my_image.png HTTP/1.1" 404
我是不是做错了什么?我的静态文件夹设置得不对吗?为什么在/home和/somePage上可以正常工作,而在/somePage/var上却不行呢?
1 个回答
2
你正在使用相对网址来加载静态元素。这种方法对于任何包含多个斜杠的路径都不管用。
建议使用 url_for()
函数来生成一个绝对路径,这样会更有效:
<div><img src="{{ url_for('static', filename='img/my_image.png') }}"></div>