我正在使用python GAE和jinja2模板构建博客。该博客具有两列的典型布局,主要内容的较大列和侧面板的较小的列。
现在我正在考虑将用户最近的5篇帖子添加到侧面板,非常类似于Google Blogger“我的博客列表”。但我担心的是,我必须将此列表传递给不同的处理程序用户转到其他页面。例如,如果用户在主博客页面,侧面板将显示5个最新帖子。但如果用户去另一个说,添加新帖子,那么此页面仍显示5最近的帖子。这是我目前做这个方法的伪代码。
MainPage_handler(self):
self.render('main.html', recent_posts = function_to_get_recent_posts())
AddNewPost_handler(self):
self.render('add_post.html', recent_posts = function_to_get_recent_posts())
该功能如下所示:
class Blog(db.Model):
owner_id = db.StringProperty()
......
created = db.DateTimeProperty(auto_now_add = True)
@classmethod
def recent_post(cls, limit, onwer_name):
blogs = cls.all().filter('owner_id = ', onwer_name).order('-created').fetch(limit)
return blogs;
有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
由于你想要最近的5篇帖子,我建议在重新定位或渲染新页面时“重新计算”它们是有意义的。在这个假设下,我不得不说你做它的方式似乎做了需要做的事情,除非它导致页面加载时间或某些问题,然后保留它。也许如果您不想每次都访问数据库,您可以使用GAE内置的memcached选项缓存这些最近的帖子,但我想这可能已经是您的函数返回的内容。
我从您的函数中看到,每次调用函数时,您似乎都直接访问数据库。每次添加帖子时缓存5个最新帖子怎么样?这样,当有人添加帖子时(在侧面板帖子的上下文中),而不是每次重定向等时,您只会访问数据库。
查看memcached here
但是,如果您使用GAE ndb,则会自动管理缓存。