自定义jinja2迭代器过滤器

7

如何最有效地编写一个自定义过滤器,使其适用于类似内置的“sort”过滤器的可迭代对象,在模板中的for循环中使用?

例如:

{% for item in iterable|customsort(somearg) %}
...
{% endfor %}

看一下 http://jinja.pocoo.org/docs/api/#writing-filters 了解一般文档。
1个回答

14

你可以像编写其他过滤器一样进行编写。这里有一个示例,可以帮助你入门:

from jinja2 import Environment, Undefined

def custom_sort(iterable, somearg):
    if iterable is None or isinstance(iterable, Undefined):
        return iterable

    # Do custom sorting of iterable here

    return iterable

# ...

env = Environment()
env.filters['customsort'] = custom_sort

不要担心效率问题,除非真的成为了问题。在任何情况下,模板引擎都不太可能成为瓶颈。


1
谢谢,这个帮助我解决了这个过滤器的问题:http://stackoverflow.com/questions/10406939/how-to-clean-up-this-jinja2-and-or-boolean-expression - Rusty Rob
@include: 我认为您不能将过滤器用作内置函数--foo|ss可以工作,但不是ss(foo)。这有帮助吗? - Cameron
@Cameron 不好意思:( 我还是得到了同样的错误 "TemplateAssertionError("no filter named 'ss'",)",使用 http://pastebin.com/QPYczXgH。我认为这种创建环境的方式没有与瓶模板环境粘合。 - include
@include:啊,好的,抱歉。恐怕我不知道如何正确地绑定它,因为我从来没有真正使用过Bottle。 - Cameron
@Cameron 哦,好的,无论如何还是谢谢你 :) - include

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接