我需要为jinja2添加一个非常简单的过滤器。基本上,如果它是正数,它需要一个数字并附加一个'+'。我按照jinja2文档关于如何添加自定义过滤器,但它似乎不起作用(在GAE上)。
的Python:
def str_votes(votes):
if votes > 0:
return '+' + str(votes)
else:
return str(votes)
# jinja2 stuff
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
autoescape=True)
jinja_env.globals['str_votes'] = str_votes
HTML(用于渲染页面):
<div>{{ 123|str_votes }}</div>
这给了我一个错误:TemplateAssertionError: no filter named 'str_votes'
我该如何解决这个问题? (这里有similar question从未回答。)
答案 0 :(得分:7)
您必须注册过滤器。类似的东西:
jinja_env.filters['str_votes'] = str_votes
答案 1 :(得分:2)
我通过在全局变量中注册它来做类似的事情:
def jinja2(self):
j.environment.globals['humanize_time']= humanize_time
return j
然后使用我们想要在模板中传递的数据调用它,如下所示:
{{ humanize_time(f.last_post_time) }}