如何在<pre>python-markdown中将"lang"属性添加到标签中?



我使用django-pygmentes来突出显示我的代码块。我正在用markdown编写内容,并在视图部分将其转换为HTML。一切都很好。现在,我想实现高亮显示。Pygmentes包需要这样的东西才能应用颜色:

<pre lang="python">...</pre>

但是,这是我在帖子中写代码块时得到的:

<pre><code clas="language-python">...</code></pre>

这是我的降价:

```python
print('Hey')

因此,Pygments找不到元素。是否有任何方法可以覆盖任何方法并应用更改?

更新:现在,我已经安装了pygments,并将此扩展添加到markdown扩展中。以下是我的降价及其产生的内容:

```{lang="python"}
print('Hello World')

输出:

<pre><code lang="python">
print('Hello World')
</code></pre>

这很好,但目前还没有什么亮点(在运行pygmentize -S default -f html -a .codehilite > styles.css之后,我还链接了经典的styles.css文件,并且它链接正确。

这是我的自定义markdown过滤器。问题可能来自这个模块:

from django import template
from django.template.defaultfilters import stringfilter
import markdown as md
register = template.Library()

@register.filter()
@stringfilter
def markdown(value):
return md.markdown(value, extensions=['markdown.extensions.fenced_code', 'markdown.extensions.attr_list'])

您总是可以恢复到原始HTML。只需将HTML直接插入您的文档:

<pre lang="python">...</pre>

您可以启用CodeHilite Markdown扩展,它使用Pygments来突出显示代码块。Python Markdown将获取fenced代码块上的语言集,并将其传递给pygments。无需使用Django应用程序。

只要您使用的是Python Markdown 3.3+版本,并且您已经启用了attr_list扩展,您就可以将任意键/值对直接分配给fenced代码块(一定要包括大括号(。

``` { lang=python }

但是,这仍然会将属性分配给code标记,而不是pre标记。像这样:

<pre><code lang="python">...

此外,请注意,生成<pre><code clas="language-python">的默认行为是在HTML规范中指定代码块语言的推荐方式(请参阅第二个"示例"(。有人可能会认为,工具无法识别为代码块指定语言的方法是一个错误。

我忘记在自定义过滤器模块中添加highlit扩展。现在,一切都很顺利。谢谢

相关内容

最新更新