【问题标题】:Custom jinja2 filter for iterator用于迭代器的自定义 jinja2 过滤器
【发布时间】:2011-03-30 02:25:39
【问题描述】:

我如何最有效地为 Jinja2 编写一个自定义过滤器,该过滤器适用于诸如内置“排序”过滤器之类的可迭代对象,以便在模板中的 for 循环中使用?

例如:

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

有关一般文档,请参阅 http://jinja.pocoo.org/docs/api/#writing-filters

【问题讨论】:

    标签: python jinja2 customization


    【解决方案1】:

    与您编写任何其他过滤器的方式相同。这是一个可以帮助您入门的示例:

    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
    

    在成为问题之前不要担心效率。无论如何,模板引擎都不太可能成为瓶颈。

    【讨论】:

    • 感谢这有助于我使用此过滤器:stackoverflow.com/questions/10406939/…
    • @include:我认为你不能像使用内置函数一样使用过滤器——foo|ss 应该可以工作,但ss(foo) 不行。这有帮助吗?
    • @Cameron no :( 我仍然收到与pastebin.com/QPYczXgH 相同的错误“TemplateAssertionError("no filter named 'ss'",)”。我认为这是创建 env 的方法没有被粘住装瓶模板环境。
    • @include:好的,抱歉。恐怕我不知道如何正确绑定它,因为我从未真正使用过瓶子。
    • @Cameron 哦,好吧,反正 10 倍 :)
    猜你喜欢
    • 2012-01-10
    • 2021-02-24
    • 2016-01-05
    • 2021-10-24
    • 2011-12-23
    • 1970-01-01
    • 2016-06-18
    • 2021-08-21
    • 2020-07-19
    相关资源
    最近更新 更多