【问题标题】:Is there a way to pull all the images from a local directory using python on flask framework & display the images on a html image gallery webpage?有没有办法在烧瓶框架上使用 python 从本地目录中提取所有图像并在 html 图片库网页上显示图像?
【发布时间】:2019-09-13 10:38:12
【问题描述】:

实际上我有一个图片库网页,我想要执行两个步骤,即 (1) - 我想从网页上传图片到我电脑的本地目录 (2) - 我想将目录上的所有图像显示到我作为图像库制作的另一个网页上

我已经成功完成了问题的第一部分,但第二部分困扰着我,我无法实现它,我使用了许多不同的技术,但没有一个有效。

所以,有人可以请教一些东西吗? 我使用的上传功能和显示功能如下

import os
from flask import Flask, request, redirect, url_for, 
send_from_directory,render_template
from werkzeug import secure_filename

UPLOAD_FOLDER = 'E:/os/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def allowed_file(filename):
    return '.' in filename and \
        filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
           return redirect(url_for('uploaded_file', filename=filename))
   return '''
   <!doctype html>
   <title>Upload new File</title>
   <h1>Upload new File</h1>
   <form action="" method=post enctype=multipart/form-data>
   <p><input type=file name=file>
      <input type=submit value=Upload>
   </form>
  '''
  @app.route('/show')
  def uploaded_file(filename):
     return render_template('template.html', filename=filename)

  @app.route('/uploads')
  def send_file(filename):
     return send_from_directory(UPLOAD_FOLDER, filename)

  if __name__ == '__main__':
     app.run()

问题是它只显示我在该实例上上传的图像,但我想提取多个图像并将它们保存在某种数据结构中,如列表,然后在 html 页面上遍历它并显示图片一张一张

【问题讨论】:

    标签: python-3.x image flask directory


    【解决方案1】:

    看看Flask - Jinja Templating。您可以轻松地将多个文件发送到 HTML 模板,并且可以在模板中轻松使用 for 循环,仅用于迭代图像文件列表并在同一页面上呈现多个图像。

    Jinja 模板 - 此处为 for 循环示例:https://www.geeksforgeeks.org/python-using-for-loop-in-flask/

    【讨论】:

      【解决方案2】:

      这是一种可能的方法:

      python的一面

      import glob
      # OTHERS IMPORTS
      
      @app.route('/show')
      def uploaded_file():
          # this function returns as a list all the files that are in the directory 
          gallery_images = glob.glob('/path/to/your/directory/*')
          print(gallery_images)
          """
              the print will return for example: ['a.png', 'lion.jpg', 'python_logo.jpeg']
          """
          return render_template('template.html', filename=galery_images)
      

      HTML 方面

      ...
      <div class="row">
          {% for f in filename %}
              <div class="col-md-4">
                  <div class="card">
                      <img class="img-responsive" src="{{url_for('static',filename='images/gallery/')}}{{ f }}" width="100px" height="100px">
                  </div>
              </div>            
          {% endfor %}
      </div>
      ...
      

      注意我是如何指定目录路径的,以及我是如何将它与迭代期间获得的文件名混合的

      【讨论】:

      • @SauravSikdar 很高兴能帮上忙。不要忘记验证答案并为它投票......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2019-09-22
      • 1970-01-01
      • 2018-06-01
      • 2020-09-14
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多