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

时间:2014-04-10 12:19:49

标签: python python-2.7 flask

我的静态文件似乎适用于我的所有页面,除非页面带有参数。这是我的代码:

文件夹结构:

[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

1 个答案:

答案 0 :(得分:2)

您正在使用相对URL来加载静态元素。这对于带有多个斜杠的路径的任何 URL都不起作用。

使用url_for()函数生成绝对路径:

<div><img src="{{ url_for('static', filename='img/my_image.png') }}"></div>