Python中Flask框架如何解决静态图片访问问题?
讨厌做伸手党,无奈查阅了很多资料,源码也找不到,作为一名新手,来这儿求助。
我们的项目是前后端分离的,在图片返回时,我返回了一个图片的完整 url,如‘ http://127.0.0.1:8888/image/1.jpg ’
然后我自己写了个接口,也能够成功访问。这个我已经成功实现了!
困惑我的是,flask 已经默认注册了一个路由
<Rule ‘/static/<filename>’ (HEAD, OPTIONS, GET) -> static>
我的想法是,如果这个默认路由可用,那么我也不用自己去写一个接口
但如果我直接访问: http://127.0.0.1:8888/static/1.jpg
在 static 目录下也放置了 1.jpg 这张图片,访问得到的是 404,这我就不是很明白了~~
望大神能解答一下,或者提供一点资料,万分感谢
Python中Flask框架如何解决静态图片访问问题?
检查一下 static 目录的位置,默认是在工程的根目录
在Flask里访问静态图片,最简单的方法就是利用框架自带的static目录。默认情况下,Flask会把项目里一个叫static的文件夹作为静态文件根目录。你只需要把图片扔进去,然后用url_for('static', filename='图片名')生成访问链接就行了。
比如,你的项目结构长这样:
/myapp
/static
logo.png
app.py
在app.py里,你可以这么写:
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route('/')
def index():
# 生成静态图片的URL
image_url = url_for('static', filename='logo.png')
return f'<img src="{image_url}" alt="Logo">'
if __name__ == '__main__':
app.run(debug=True)
访问http://127.0.0.1:5000/就能看到图片了。url_for函数会帮你拼出正确的路径,比如/static/logo.png。
如果你想换个目录名或者放在别的地方,可以在创建Flask应用实例时设置static_folder参数:
app = Flask(__name__, static_folder='assets')
这样Flask就会去assets目录里找静态文件了。
总结一下,用默认的static目录配合url_for最省事。
你的项目可以直接这样访问吗?
就是随便新建一个 html,然后写一句<img src=“http://127.0.0.1:8888/static/1.jpg”>,而不是在 template 渲染
我觉得不是工程的问题,我新建了工程也不能这样访问。。
看描述,貌似是你路径写的不对,试试 app/static/image/1.jpg 这样的路径
Nging 之类的服务器,有进行配置静态文件夹路径吗?
location ^~ /static/ {
root /home/user_name/porject/app; # 静态文件根目录,根据项目情况更改
谢谢各位了,已经自己解决了~~
你使用的是 flask 自带的测试服务器吗
没用 Nginx 做静态文件代理?
哈 好了 我是本地的 static 路径也错了 哈 ~~~~
1111111111 楼主还在吗我也遇到了一样的问题
你好我也出问题了但是我没解决 可以请教一下吗
这个问题太久了,现在也没用 flask
如果没记错的话应该是文件路径问题,
尤其是这句
我的目录结构是
- apps
init.py
- static
我的 Flask 是在__init__文件下初始化的,要写成这样
app = Flask(name, template_folder="…/templates", static_folder="…/static")
意思就是你的 static 文件夹和你的 Flask 对象初始化的 static_folder,要对应

