我是Jinja2的新手,目前我已经能够实现我想要的大部分功能。然而,我需要使用正则表达式,但在文档或谷歌上似乎找不到任何相关内容。
我想创建一个类似于Javascript中以下行为的宏:
function myFunc(str) {
return str.replace(/someregexhere/, '').replace(' ', '_');
}
如何在Jinja2中删除字符串中的字符并将空格替换为下划线?
我是Jinja2的新手,目前我已经能够实现我想要的大部分功能。然而,我需要使用正则表达式,但在文档或谷歌上似乎找不到任何相关内容。
我想创建一个类似于Javascript中以下行为的宏:
function myFunc(str) {
return str.replace(/someregexhere/, '').replace(' ', '_');
}
如何在Jinja2中删除字符串中的字符并将空格替换为下划线?
如果你不需要正则表达式,那么可以使用一个名为replace
的现有过滤器。否则,你可以注册一个自定义过滤器:
{# Replace method #}
{{my_str|replace("some text", "")|replace(" ", "_")}}
# Custom filter method
def regex_replace(s, find, replace):
"""A non-optimal implementation of a regex filter"""
return re.sub(find, replace, s)
jinja_environment.filters['regex_replace'] = regex_replace
find
在每次被 re.sub
使用时都会被编译,如果它在一个大循环中被用作过滤器,那么它可能会成为一个瓶颈。 如果情况是这样的,您可以向过滤器添加一个关键字参数(cache
),并在设置 True
的时候编译和存储 find
参数 - 或者您可以编译并缓存所有 find
参数,并选择最适合您的应用程序的弹出策略。 - Sean Vieira