tl; dr版本:如何让我的Flask应用程序加载不在项目目录中的图像?
我正在构建(作为一个有趣的项目)Flask应用程序,设计为命令行应用程序,从浏览器中的当前工作目录加载随机图像。这是应用程序结构的样子。
+-- imgdisplay/
+-- imgdisplay/
+-- imgdisplay.py
+-- static/
+-- styling.css
+-- templates/
+-- img.html
+-- setup.py
+-- LICENSE
+-- README.md
我的setup.py
有一个entry_points
关键字参数,如下所示:
entry_points={
'console_scripts': [
'imgdisplay=imgdisplay.imgdisplay:start_server'
]
这让我可以从任何地方启动命令行应用imgdisplay
。我已经确认这部分没问题。
我的imgdisplay.py
代码如下所示:
from flask import Flask, render_template
import webview
import click
from random import choice
import os
import os.path as osp
import logging
app = Flask(__name__)
# logging.setLevel(logging.DEBUG)
@app.route('/')
def hello(name=None):
files = os.listdir(os.getcwd())
image = choice([f for f in files if f[-4:] == '.jpg'])
# tried the following line, but didn't work.
# image = osp.join(os.getcwd(), image)
# logging.info(image)
return render_template('img.html', name=name, files=files, image=image)
@click.command()
@click.option('--port', default=5000, help='Port', prompt='Port')
@click.option('--host', default='localhost', help='Host', prompt='Host')
def start_server(port=5000, host='localhost'):
app.run(host='localhost', port=port)
if __name__ == '__main__':
start_server()
我的img.html
模板如下所示:
<!doctype html>
<head>
<link href="https://fonts.googleapis.com/css?family=PT+Sans" rel="stylesheet"></link>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styling.css') }}">
</head>
<body>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
{{ image }}
{% if image %}
<img src="{{ image }}"></img>
{% endif %}
</body>
总而言之,这是一款非常简单的Flask应用程序。像我这样的菜鸟会建立起来。
在我的桌面上,我有一个名为images/
的文件夹,我在其中放置了一个图像。我可以在浏览器中显示文件名字符串,但是我无法显示图像;我希望在浏览器中看到加载的图像,但我得到的只是显示图像无法找到的图标。请原谅我的愚蠢,但是我在这里缺少的关键概念是什么?
答案 0 :(得分:1)
我可以在浏览器中显示文件名字符串
它不是浏览器的网络功能,它是浏览器本地文件系统功能,但是,当您将swift build
这样的路径放在html中时,如下所示:
/home/yetship/images/test.jpg
它确定它不起作用,因为如果您在网址:<html>
<body>
<img src="/home/yetship/images"></img>
</body>
</html>
访问您的网站,则img标记将无法在您的电脑中找到路径为http://localhost:8080
的图片,而是会在/home/yetship/images
中找到图片,因此,如果您想要显示图片,则应该关注this guide以使您的http://localhost:8080/home/yetship/images
目录成为静态目录,并且应该image
标记为:
img
而不是
<img src="image/test.jpg"></img>
并且烧瓶将在<img src="/home/yetship/image/test.jpg"></img>
目录中找到该图像并显示在您的浏览器上。
我希望这可以帮到你。