如何在带参数的块上使用Jinja2过滤器

2024-10-03 02:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用jinja2模板。我有一个名为highlight的自定义过滤器,它接受字符串和语言名称,并将它们传递给pyhments以获取代码。我试着这样使用它:

{% filter highlight("python") %}
import sys

def main():
    pass
{% endfilter %}

但我有个错误:

AttributeError: 'str' object has no attribute 'get_tokens'

然后我尝试了这个:

{% filter highlight "python" %}

它也不起作用。你知道吗

可能有一个技巧通过set block filtering然后通过{{ ... }}粘贴回来,但是这个技术还没有在主源代码中合并,对我来说似乎太黑了。你知道吗

那么,这是可能的,还是我只是做错了?你知道吗

编辑:这里是过滤器:

@jinja2.contextfilter
def highlight(context, code, lang):
    print("HIGHLIGHT")
    print(code)
    return jinja2.Markup(pygments.highlight(code, lexer=lang, formatter='html'))

Tags: 字符串代码import名称模板语言过滤器jinja2
1条回答
网友
1楼 · 发布于 2024-10-03 02:40:25

我是个白痴,那是pygments错误。由于某种错误,我没有看到stacktrace中的最后一个条目是从那里来的。你知道吗

您应该使用:

pygments.highlight(
    code, 
    lexer=pygments.lexers.get_lexer_by_name(lang), 
    formatter=pygments.formatters.get_formatter_by_name('html')
)

而不是:

pygments.highlight(code, lexer=lang, formatter='html')

相关问题 更多 >