2016-08-10 16 views
1

我正在嘗試使用jinja2模板。我有一個名爲highlight的自定義過濾器,它需要字符串和語言名稱,並將它們傳遞到pyhments以進行代碼高亮顯示。我想用這樣的:如何在一個包含argumets的塊上使用Jinja2過濾器

{% 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

您可以顯示您的自定義'highlight'篩選定義? – hjpotter92

+0

@ hjpotter92已添加到帖子。 –

+0

哪行顯示錯誤? – hjpotter92

回答

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') 
相關問題