【问题标题】:Jinja2 not displaying the imagesJinja2 不显示图像
【发布时间】:2017-04-14 02:54:55
【问题描述】:

我在显示上传文件夹中的照片时遇到问题。 我有一个表单,用户可以在其中输入标题、描述并上传图片,然后将其插入数据库。我可以显示我刚刚在模板上添加的所有数据,除了图像,只有一个 X 而不是图像。

ps。图像已成功下载到上传文件夹,并且文件名已成功添加到数据库。它只是没有显示在页面上。

app.py

#route to content page
@app.route('/dashboard', methods = ['GET', 'POST'])
def dashboard():
    error = None
    form = MessageForm()
    if form.validate_on_submit():
        filename = secure_filename(form.photo.data.filename)
        form.photo.data.save(os.path.join('uploads/', filename))
        new_message = BlogPost(
            form.title.data,
            form.description.data,
            form.photo.data.filename,
            current_user.id
        )
        db.session.add(new_message)
        db.session.commit()
        flash("Your recipe was successfully posted. Thanks!")
        posts = db.session.query(BlogPost).all()
        return render_template('dashboard.html', posts = posts, form = form,
                               error = error)
    else:
        posts = db.session.query(BlogPost).all()
        return render_template('dashboard.html', posts = posts, form = form,    
                               error = error)

模板

  {% for post in posts %}
  <div class="col-xs-12 col-sm-6 col-md-4 col-lg-5 masonry-item"> 
    <div class="box-masonry"><a href="#" title="" class="box-masonry
     image with-hover-overlay">
    <img src="uploads/{{ post.photo }}" alt="" class="img-responsive"
     </a>
      <div class="box-masonry-hover-text-header"> 
        <h4> <a href="#">{{ post.title }}</a></h4>
        <div class="box-masonry-desription">
          <p>{{ post.description }}</p>
          <p><strong>{{ post.author.name }}</strong></p>
        </div>
      </div>
    </div>
  </div>
  {% endfor %}

【问题讨论】:

  • 当我手动指向它时工作正常,但显然我希望它是动态的......
  • 觉得需要相对路径,试试/uploads/
  • 已经试过了,没用。
  • 它是否正确放置在静态文件夹中?试试{{ url_for('static', filename ='uploads\'+post.photo) }}
  • 它有效......耶稣。我之前试过了,还是不行,不明白。非常感谢朋友!

标签: python flask sqlite sqlalchemy jinja2


【解决方案1】:

来自烧瓶Doc

要为静态文件生成 URL,请使用特殊的“静态”端点 名称:

url_for('static', filename='style.css')

该文件必须作为 static/style.css 存储在文件系统中。

在你的情况下你应该使用:

{{ url_for('static', filename='uploads/' + post.photo) }}

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2019-12-13
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多