As John Case noted in the comments, I added a filter:
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
this is added in jinja2 environment.filters dict
myconfig = {} myconfig['webapp2_extras.jinja2'] = {'template_path': ['templates','blog_posts'], 'filters': {'blog_filter': blog_filter}} app = webapp2.WSGIApplication(_routes, debug=True, config = myconfig)
expression takes the form:
{% for blog_dict in blogs|blog_filter(file_name_filter,category_filter)|sort(reverse=True,attribute='date') %}
I was also able to use this filter elsewhere, for example in my side menu:
{% for month, blog_dicts in blogs|blog_filter(False, category_filter)|groupby('date.month')|sort(reverse=True,attribute='grouper') %}
Note. I use the jinja2 shell (from webapp2_extras import jinja2) and this is a caching property in my base manipulator
class BaseHandler(webapp2.RequestHandler): @webapp2.cached_property def jinja2(self): return jinja2.get_jinja2(app=self.app) def render_template(self, filename, **kwargs):
robert king
source share