仅格式<code> Tags w/ pygments</code>

时间:2014-06-13 21:31:18

标签: python flask markdown pygments

我尝试使用Pygments / Markdown让用户在我正在使用Flask的项目中保留格式化的代码块。我遇到的问题是Pygments正在格式化所有内容。

我想在文本上调用Markdown,以便将<code>标记添加到文本中,然后让Pygments仅格式化<code>标记中的文本。这是我尝试过的。

@app.route('/')
def show_entries():
    entries = get_all_entries()
    lexer = PythonLexer()
    lexer.add_filter('codetagify')
    formatter = HtmlFormatter()
    for entry in entries:
        entry['text'] = markdown.markdown(entry['text'])
        entry['text'] = highlight(entry['text'], lexer, formatter)
    return render_template('list_entries.html', entries=entries)

其中entries是词典列表,entry['text']是帖子的正文。在这个配置中发生的是Pygments显示所有html格式,而不是允许浏览器呈现它。我认为添加codetagify过滤器会阻止该形式发生。关于我为实现这一目标需要做些什么的想法?

2 个答案:

答案 0 :(得分:1)

我自己找到了答案。我只需要Pygments,因为Markdown使用它来为代码着色。我只需要在markdown.markdown()电话中添加一个扩展程序。

@app.route('/')
def show_entries():
    entries = get_all_entries()
    for entry in entries:
        entry['text'] = markdown.markdown(entry['text'], extensions=['codehilite'])
    return render_template('list_entries.html', entries=entries)

只需要extensions=['codehilite']参数。

答案 1 :(得分:0)

我认为codetagify无法实现您的想法。见http://pygments.org/docs/filters/

我不知道。也许你必须自己分离你想要格式化的文本部分,并且只将这些部分传递给荧光笔。我想当他们说&#34;过滤&#34;它们只是意味着以某种方式转换文本的东西。如果Pygments只在代码标签之间格式化文本部分,那将是一件好事。也许有一种方法可以做到这一点,但是在浏览文档的章节标题时我没有看到它。