【发布时间】:2021-06-16 15:21:18
【问题描述】:
我在博客页面上工作,我正在尝试按标签过滤帖子,问题是当只有 1 或 2 个帖子与查询匹配时,我得到了几个页面(我将 per_page 设置为 6)。
我有另一个过滤器可以正常工作,因此我猜问题出在查询对象中。
这是我的视图索引代码的一部分:
if current_user.is_authenticated:
show_followed = bool(request.cookies.get('show_followed', ''))
if show_followed:
query = current_user.followed_posts
elif show_tag:
tag = Tag.query.filter_by(tag_name=show_tag).first()
query = tag.post
else:
query = Post.query
page = request.args.get('page', 1, type=int)
pagination = query.order_by(Post.timestamp.desc()).paginate(
page, per_page=current_app.config['POSTS_PER_PAGE'],
error_out=False)
posts = pagination.items
return render_template("index.html", posts=posts, pagination = pagination, show_followed=show_followed, show_tag=show_tag)
当我尝试在控制台中复制问题时,我检查示例标签的查询是否匹配 3 个帖子,但 pagination.total(项目总数)返回 23!分页对象将什么作为项目?
我这样做是为了在烧瓶外壳中进行测试:
tagname = 'pruebatag'
tag = Tag.query.filter_by(tag_name=tagname).first()
query = tag.post
#here if y try query.all() I get 3 posts in return
pag_object = query.paginate(per_page = 6)
pag_object.total
>>> 23
pag_object.pages
>>> 4
pag_object.items #returns items for current page
>>> [<Post example>] #only one post returned for this page? why 4 pages?
我复制了我对 tags 表的定义:
class Tag(db.Model):
__tablename__ = 'tags'
id = db.Column(db.Integer, primary_key=True)
tag_name = db.Column(db.String(40), unique=True)
def add_tag(self):
if not self.id:
db.session.add(self)
db.session.commit()
tag_join = db.Table('tag_join',
db.Column('post_id', db.Integer, db.ForeignKey('post.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tags.id'))
)
在后期模型中:
tags = db.relationship('Tag',
secondary=tag_join,
backref=db.backref('post', lazy='dynamic'),
lazy='dynamic')
任何帮助将不胜感激,因为我在这个问题上浪费了很多时间 如果您需要更多详细信息,请告诉我。
谢谢!
【问题讨论】:
标签: flask pagination flask-sqlalchemy