Flask静态文件夹在带参数的页面上无法工作

0 投票
1 回答
1212 浏览
提问于 2025-04-18 02:11

我的静态文件在所有页面上都能正常工作,除了当某个页面需要参数的时候。以下是我的代码:

文件夹结构:

[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>

撰写回答