我的静态文件似乎适用于我的所有页面,除非页面带有参数。这是我的代码:
文件夹结构:
[WEB]
myApp.py
[templates]
test.html
[static]
[img]
my_image.png
Flask app:
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 ?
答案 0 :(得分:2)
您正在使用相对URL来加载静态元素。这对于带有多个斜杠的路径的任何 URL都不起作用。
使用url_for()
函数生成绝对路径:
<div><img src="{{ url_for('static', filename='img/my_image.png') }}"></div>