Python,Flask和Jinja-如何使用组输出查询

时间:2018-11-30 22:50:37

标签: python flask jinja2

我是Python和Flask的新手,并且对使用组循环输出有疑问。我有一个名为“书签”的表,其中有一个名为categoryid的字段。在我的Jinja模板上,我想做类似的事情:

bookmark.Category.title
  bookmark.title
  bookmark.title

我的数据部分可以很好地处理这种关系,但是我迷恋在模板方面。

我的书签模型如下:

class Bookmark(db.Model):
__tablename__ = 'bookmarks'
id                  = db.Column(db.Integer, primary_key=True)
userid              = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
categoryid          = db.Column(db.Integer, db.ForeignKey('categories.id'), nullable=False)
url                 = db.Column(db.TEXT, nullable=False)
title               = db.Column(db.String(128), nullable=False)
allow_all           = db.Column(db.Boolean, nullable=False, default=False)
date_created        = db.Column(db.DateTime, default=db.func.current_timestamp())
date_updated        = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
date_deleted        = db.Column(db.DateTime)

我的类别模型如下:

class Category(db.Model):
__tablename__ = 'categories'
id                  = db.Column(db.Integer, primary_key=True)
title               = db.Column(db.String(128), nullable=False)
date_created        = db.Column(db.DateTime, default=db.func.current_timestamp())
date_updated        = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
date_deleted        = db.Column(db.DateTime)

我的控制器功能如下:

@mod_user.route('/home', methods=['GET', 'POST'])
@login_required
def home():
    bookmarks = db.session.query(Bookmark, Category, User)\
        .join(Category)\
        .join(User, Bookmark.userid == User.id)\
        .filter((Bookmark.userid == current_user.id) | (Bookmark.allow_all == True))\
        .order_by(Category.title.asc(), Bookmark.title.asc())\
        .group_by(Category.title)\
        .all()
    return render_template(('user/home.html'), bookmarks=bookmarks)

我现在在模板上拥有的是:

    {%  for bookmark in bookmarks %}
    <tr>
        <td><a href="{{ bookmark.Bookmark.url }}" target="_new">{{ bookmark.Bookmark.title }}</a></td>
        <td>{{ bookmark.Bookmark.date_created }}</td>
        <td>{{ bookmark.Category.title }}</td>
        <td>{{ bookmark.User.first_name }} {{ bookmark.User.last_name }}</td>
    </tr>
{% endfor %}

我希望书签.Category.title具有某种破损或标题的含义-但我迷路了。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于在Bookmark模型中创建的categoryid外键,您需要在Category模型中进行另一个输入。

在您的类别模型中添加以下代码-

class Category(db.Model):
    bookmark = db.relationship('Bookmark', backref='category', lazy='dynamic')