如何使用Jinja和Flask从我的图像文件夹动态渲染图像?

时间:2015-10-26 20:38:42

标签: python flask

我正在使用Flask学习Python并创建一个我想做一段时间的玩具应用程序。我遇到了标准文件上传的特定功能问题。我想要做的是尝试根据特定模型从我的图像文件夹动态渲染图像,但我似乎在尝试字符串插值时遇到问题。

这是我的观看代码:

<h1>List of Employees</h1>

{% if employees %}
    {% for employee in employees: %}
      <p>{{ employee.name }}</p>
      <p>{{ employee.title }}</p>
      <p>{{ employee.email }}</p>
      <p>{{ employee.department }}</p>

      # How do I use Jinja and python to interpolate this so I can 
      # grab the correct image
      <img src="static/images/" + {{employee.profile_image }} alt={{ employee.name }} width="120" height="90">{{ employee.profile_image }}</img>
    {% endfor %}
  {% endif %}

应该非常简单。我被红宝石和铁轨宠坏了......帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:16)

您的img标记应如下所示

<img src="static/images/{{ employee.profile_image }}" alt={{ employee.name }} width="120" height="90" />

假设employee.profile_image是相对于static/images/的路径

如果没有profile_image值但你想显示默认值,你也可以使用Jinja2的default过滤器。

<img src="static/images/{{ employee.profile_image | default('profile.jpg') }}" alt={{ employee.name }} width="120" height="90" />

答案 1 :(得分:1)

假设:

  • 您的images文件夹位于static文件夹内
  • 您只存储完整的文件名,而不存储employee.profile_image内的路径

您可以使用以下替代方法将图像加载到Jinja2模板中:

<img src="{{ url_for('static', filename = 'images/'+employee.profile_image) }}" alt="">

注意,没有{}周围的employee.profile_image。)

此方法与另一个方法的区别在于,当您尝试从employees/employee_details.html模板加载图像时,您将获得正确的图像路径:/static/images/employee_image_1.jpg

但是,如果您尝试对<img src="static/images/{{ employee.profile_image }}" alt="" />做同样的事情,您的路径最终可能是:/employees/static/images/employee_image_1.jpg,这不是您想要的。