首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将python代码嵌入到图像的Jinja2模板中?

如何将python代码嵌入到图像的Jinja2模板中?
EN

Stack Overflow用户
提问于 2015-01-15 17:53:26
回答 1查看 6.8K关注 0票数 2

在下面的代码中,我试图在页面上加载一个jpg图像。在本例中,图像具有数据库记录1.jpg的主键id。我想使用{{ film.id }.jpg之类的东西。怎么做?下面的代码不显示图像。

film.id只是记录中的主键。我想用它作为一个参考索引号码,以相应的图像与它的电影。在标记中,film.id应该展开为整数。由于数据库中只有两部电影,所以它们应该是1和2。

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MovieDB</title>
</head>
<body>
{% for film in films %}
    <p>{{ film.title }}</p>
    <img src="{{ url_for('static', filename='img/{{ film.id }}.jpg') }}">
{% endfor %}        
</body>
</html>

我尝试将Alex提供的示例添加到我的views.py中:

代码语言:javascript
运行
复制
from flask import render_template, url_for
from app import app
from jinja2 import filters, environment
from app.models import *


@app.route('/')
@app.route('/index')
def index():
    films = session.query(Film).all()

    return render_template('index.html', films=films)

def ufs(film_id):
    return url_for('static', filename='img/{}.jpg'.format(film_id))

app.filters['ufs'] = ufs

它提供了以下堆栈跟踪:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import app
  File "/Users/jwebster/Code/Python/filmdb/app/__init__.py", line 7, in <module>
    from app import views
  File "/Users/jwebster/Code/Python/filmdb/app/views.py", line 17, in <module>
    app.filters['ufs'] = ufs
AttributeError: 'Flask' object has no attribute 'filters'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-15 17:56:05

您需要定义一个自定义过滤器(并向Jinja2注册它),以允许从Jinjia2模板中访问任意的Jinjia2代码。有关详细信息,请参见http://jinja.pocoo.org/docs/dev/api/#custom-filters

例如,在Python服务器代码中,启动时:

代码语言:javascript
运行
复制
def ufs(film_id):
    return url_for('static', filename='img/{}.jpg'.format(film_id))

environment.filters['ufs'] = ufs

其中environment是您的Jinja2环境,您可以使用import使url_for作为不限定的名称可见。

然后,在从此环境呈现的Jinja2模板中,

代码语言:javascript
运行
复制
{{ film.id | ufs }}

会根据您的需要展开(如果film.id是正确的--可能是 in for,但您已经将放置在之外,至少在当前的Q版本中,这可能会因为其他原因而破坏事物)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27969864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档