烧瓶应用程序:从当前工作目录加载图像



tl; dr版本:如何将烧瓶应用程序加载到项目目录中的图像?

我正在构建(作为一个有趣的项目),设计为命令行应用程序,该应用程序从浏览器中的当前工作目录中加载一个随机图像。这是应用结构的样子。

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

总的来说,这是一个非常简单的烧瓶应用程序。像我这样的菜鸟会构建的东西。

在桌面上,我有一个名为images/的文件夹,其中我放了一个图像。我可以在浏览器中显示文件名字符串,但是我无法显示图像。我希望看到加载在浏览器中的图像,但我得到的只是图标,显示该图像找不到。赦免我的菜鸟,但是我在这里缺少的关键概念是什么?

我可以在浏览器中显示文件名字符串

它不是浏览器的网络功能,它是浏览器本地文件系统功能,但是,当您将诸如html之类的路径(例如/home/yetship/images/test.jpg)放在这样的路上时:

<html>
    <body>
       <img src="/home/yetship/images"></img>
    </body>
</html>

肯定它不会工作,因为如果您在URL:http://localhost:8080中访问网站,IMG标签将无法使用PATH /home/yetship/images在PC中找到图像,它将在http://localhost:8080/home/yetship/images中找到图像,因此,如果您愿意,如果您愿意,它显示,您应该遵循本指南,以使您的image目录成为静态目录,并且应将img标记为:

<img src="image/test.jpg"></img>

而不是

<img src="/home/yetship/image/test.jpg"></img>

和烧瓶会在您的image目录中找到图像,并在浏览器上显示。

我希望这可以帮助您。

最新更新