2

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

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

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

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

这是我的降价:

```python
print('Hey')

因此,Pygments 找不到该元素。有没有办法覆盖任何方法并应用更改?

更新:现在,我已经安装了pygments这个扩展并将这个扩展添加到降价扩展中。这是我的降价及其生成的内容:

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

输出:

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

太好了,但是还没有高亮显示.. :( 我还在styles.css运行后链接了经典文件,pygmentize -S default -f html -a .codehilite > 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'])
4

2 回答 2

2

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

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

您可以启用CodeHilite Markdown 扩展,它使用 Pygments 突出显示代码块。Python-Markdown 将采用隔离代码块上设置的语言并将其传递给 pygments。无需使用 Django 应用程序。

只要您使用的是 Python-Markdown 3.3+ 版本并且您启用了attr_list扩展,您就可以将任意键/值对直接分配给受保护的代码块(确保包含大括号)。

``` { lang=python }

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

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

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

于 2020-11-06T20:35:07.360 回答
0

我忘了highlit在自定义过滤器模块中添加扩展名。现在,一切都运行良好。谢谢。

于 2020-11-10T21:11:47.107 回答