我正在尝试使用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'))
最佳答案
我是个白痴,那是pygments
错误。由于某些错误,我没有看到堆栈跟踪中的最后一个条目来自那里。
您应该使用:
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')
关于python - 如何在带有参数的 block 上使用 Jinja2 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38879318/