Dar*_*awg 2 python jinja2 flask
我有以下代码,我正在尝试在页面上加载jpg图像.在这种情况下,图像具有数据库记录1.jpg的主键ID.我想使用{{film.id}}.jpg之类的东西.怎么做?下面的代码不会渲染图像.
film.id只是记录中的主键.我想将它用作相应图像到其胶片的参考索引号.在标签中,film.id应该扩展为整数.由于我在数据库中只有两部电影,因此应该是1和2.
<!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>
Run Code Online (Sandbox Code Playgroud)
我尝试将Alex给出的示例添加到我的views.py:
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
Run Code Online (Sandbox Code Playgroud)
它给出了以下堆栈跟踪:
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'
Run Code Online (Sandbox Code Playgroud)
您需要定义自定义过滤器(并使用Jinja2注册)以允许从Jinjia2模板中访问任意Python代码.有关所有详细信息,请参见http://jinja.pocoo.org/docs/dev/api/#custom-filters.
例如,在您的Python服务器代码中,在启动时:
def ufs(film_id):
return url_for('static', filename='img/{}.jpg'.format(film_id))
environment.filters['ufs'] = ufs
Run Code Online (Sandbox Code Playgroud)
environment你的Jinja2环境在哪里,你import可以url_for看到一个不合格的名字.
然后,在从这个环境渲染的Jinja2模板中,
{{ film.id | ufs }}
Run Code Online (Sandbox Code Playgroud)
将根据您的需要进行扩展(如果film.id是正确的 - 它可能会在其中for,但您已将其放在外面,至少在您的Q的当前版本中,这可能会因其他原因而破坏).
| 归档时间: |
|
| 查看次数: |
4370 次 |
| 最近记录: |