6

I'm trying to display images located in a folder which is not the default static folder.

My template looks like:

{% extends "layout.html" %}
{% block body %}
   Albums
   {% for album in albums %}
      <img src="{{ album ['ThumbPath'] }}">
   {% endfor %}
{% endblock %}

The generated HTML looks like:

<!doctype html>
<title>iPhoto</title>
<link rel=stylesheet type=text/css href="/static/style.css">
<div class=page>
<h1>iPhoto</h1>  
<img src="/Users/Darrell/Pictures/iPhoto Library/Thumbnails/2013/08/09/20130809-180444/t264vvMaQM+GJosBP+4q+Q/_DSC1225.jpg">  
<img src="/Users/Darrell/Pictures/iPhoto Library/Thumbnails/2013/08/09/20130809-181030/urU3jqSKRgGNNP1MjKhpvg/_DSC1268.jpg">
<img src="/Users/Darrell/Pictures/iPhoto Library/Thumbnails/2013/08/09/20130809-181037/1zYyNYReRg+Sizx8v4BUkw/_DSC0923.jpg">  
<img src="/Users/Darrell/Pictures/iPhoto Library/Thumbnails/2013/08/09/20130809-181038/sKzEEB3jSf6GBs2heQIviA/Kelly.jpg">
</div>

How can get the images to be rendered on the generated webpage. The path to the image is correct. It is no option to copy all images to the static folder.

Darrell

4

2 回答 2

5

看起来你有文件系统路径而不是站点。当您启动资源时,/路径将从站点根目录开始(站点的绝对路径,不带斜线或带有./或是../相对的)例如,如果您有站点http://test.com,则将/http://test.com//test将是http://test.com/test。您可以为其他站点设置具有特定协议protocol://或相同当前站点的路径//。您总是可以在浏览器错误控制台中找到错误(完整)网址的错误。

要访问文件系统,您必须使用file://协议,并且您的网址将类似于file:///Users/Darrell/Pictures/.... 但它仅适用于您的计算机,并且可能存在安全问题。您还可以将此文件的符号链接设置为静态文件夹,这可以解决安全问题,但不能仅解决您的计算机问题。为了彻底解决这个问题,最好将此文件发布到您的应用程序或公共(私有)Web 服务器上以获取图像或其他静态文件。

于 2013-08-22T05:07:48.617 回答
3

所以这是我的项目路径。我写了一个简单的函数,可以让它在网页上呈现。我不是 100% 确定它是否会在部署后工作,所以我会更新它是否在部署时工作。

 <img alt="" src="{{ url_for('send_file', filename=image_url) }}" id ="img"/>

这是 HTML 元素的代码,这里是它在服务器端的 Python 对应代码。

def getImageName(x):
    """
    Dealing with Unix Path names and Windows PathNames
    """
    if platform.system() == 'Linux':
        return  x[x.rfind("/")+1:]
    return x[x.rfind("\\")+1: ]
      
def getFolder(x):
        y = []
        if platform.system() == 'Linux':
            y = x.split("/")
        else:
            y = x.split("\\")
       # print(y)
        cat_name = ""
        if "roomImage" in x:
            cat_name+="roomImage/" + y[-2]
        elif "lobbyImage" in x:
            cat_name+="lobbyImage"
        elif "miscImage" in x:
            cat_name += "miscImage/" + y[-2]
        elif "washroomImage" in x:
            cat_name += "washroomImage"
        else:
            cat_name += "facadeImage"
        return cat_name + "/"

@app.route("/send_file/<filename>")
def send_file(filename):
   return send_from_directory(app.config["UPLOAD_FOLDER"] +"/" + getFolder(filename) , getImageName(filename))

这在大多数情况下都有效。顺便说一句,image_url 应该是图像的绝对路径,您可以通过 render_template 将其作为参数传递给 Jinja2 模板,如下所示:

return render_template("/contentpage.html",image_url=imgurl)

不要忘记导入 send_from_directory 并将 app.config["UPLOAD_FOLDER"] 设置为适当的目录。这不是最有效的方法

于 2020-02-13T10:59:40.283 回答