将ORM对象传递给tempate的基本过程

时间:2017-11-15 17:59:19

标签: python flask sqlalchemy jinja2 flask-sqlalchemy

我尝试使用https://github.com/hack4impact/flask-base并尝试将sqlalchemy orm对象传递给jinja2模板。

我的房产模型是;

class Property(db.Model):
    __tablename__ = 'properties'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(140))
    body = db.Column(db.String(1400))
    img = db.Column(db.String(140))
    ....

在我的main / views.py中,我有:

from flask import render_template
from app import db
from app.models import Property

from . import main


@main.route('/')
def index():
    props = db.session.query(Property).all()
    return render_template('main/index.html')

我知道要将变量传递给模板,您可以这样做:

    return render_template('main/index.html', pr= props)

但是尝试:

>>> type(props[0])
 <class 'app.models.property.Property'>

这似乎是错误的对象类型。我会假设你会传递一些更通用的东西,就像一个dicts列表。将sqlalchemy对象列表传递给jinja2模板的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

Jinja2可以处理传递给模板渲染器的任何类型的Python对象,因为它是用Python编写的,特别是可以像这样工作。因此,如果您将props列表传递给render_template,它就可以正常使用。

您可以像正常一样访问对象方法和属性,甚至可以进行迭代:

{% for prop in pr %}
  <p>Title: {{ prop.title }}</p>
  <p>Body: {{ prop.body }}</p>
  <img src="{{ prop.image }}" />
{% endfor %}