正如约翰·凯斯在评论中提到的,我添加了一个过滤器:
def blog_filter(blogs, file_name_filter, category_filter):
if file_name_filter:
blogs = (d for d in blogs if d['filename'] == file_name_filter)
if category_filter:
blogs = (d for d in blogs if d['category'] == category_filter)
return blogs
这被添加到 jinja2environment.filters 字典中
myconfig = {}
myconfig['webapp2_extras.jinja2'] = {'template_path': ['templates','blog_posts'],
'filters': {'blog_filter': blog_filter}}
app = webapp2.WSGIApplication(_routes,
debug=True,
config = myconfig)
表达式变为:
{% for blog_dict in blogs|blog_filter(file_name_filter,category_filter)|sort(reverse=True,attribute='date') %}
我还可以在其他地方使用此过滤器,例如我的侧面菜单:
{% for month, blog_dicts in blogs|blog_filter(False, category_filter)|groupby('date.month')|sort(reverse=True,attribute='grouper') %}
注意我使用 jinja2 包装器(from webapp2_extras import jinja2)
它是我的基本处理程序中的缓存属性
class BaseHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_template(self, filename, **kwargs):
#call self.response.write(self.jinja2.render_template(..)