我是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具有某种破损或标题的含义-但我迷路了。任何建议将不胜感激。
答案 0 :(得分:0)
对于在Bookmark模型中创建的categoryid外键,您需要在Category模型中进行另一个输入。
在您的类别模型中添加以下代码-
class Category(db.Model):
bookmark = db.relationship('Bookmark', backref='category', lazy='dynamic')