【发布时间】:2014-06-08 22:21:16
【问题描述】:
目标:路由到单个文章/博客文章并包含分页(使用 SQL-Alchemy),以便用户可以轻松导航到之前和未来的文章。
目前,我有以下内容:
@app.route('/articles/ind/<int:id>', endpoint='article')
def indarticle(id = 1):
posts= Post.query.paginate(id, 1, False)
return render_template('article.html',
title = "Article",
posts = posts)
可以看出,我每页显示一篇文章,所以假设文章从 ID = 1 开始,ID 和页码匹配。但是,如果它们不匹配(或者文章从数据库中删除),则路由和呈现的页面不匹配。我可以轻松地遍历表格的行来查找哪个页码对应于正确的文章 ID;但是,这似乎不是很有效或不实用。
解决这个问题的最佳方法是什么?
更新: 从下面迭代答案,我创建了以下内容:
models.py
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(100))
body = db.Column(db.Text)
timestamp = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def get_count(self):
return db.session.query(Post).count()
def prev_post(self):
count = self.get_count()
pid = self.id
while (count > 0):
prev_post = None
pid = pid - 1
if db.session.query(Post).get(pid) is not None:
prev_post = db.session.query(Post).get(pid)
break
else:
count = count - 1
return prev_post
def next_post(self):
count = self.get_count()
pid = self.id
while (count > 0):
next_post = None
pid = pid + 1
if db.session.query(Post).get(pid) is not None:
next_post = db.session.query(Post).get(pid)
break
else:
count = count - 1
return next_post
def has_prev(self):
return True if self.prev_post() is not None else False
def has_next(self):
return True if self.next_post() is not None else False
这样,我可以获取下一篇文章,上一篇文章,以及轻松检查它们是否存在,就像 flask-sqlalchemy 处理分页的方式一样。
【问题讨论】:
标签: python pagination flask sqlalchemy flask-sqlalchemy