我正在尝试使用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'))
答案 0 :(得分:2)
我是个白痴,那是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')