【问题标题】:How to Add "lang" Attribute to a <pre> Tag in python-markdown?如何将“lang”属性添加到 python-markdown 中的 <pre> 标签?
【发布时间】:2021-02-19 09:51:59
【问题描述】:

我使用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>

这很棒,但是还没有突出显示.. :( 在运行pygmentize -S default -f html -a .codehilite &gt; 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'])

【问题讨论】:

    标签: python django markdown syntax-highlighting python-markdown


    【解决方案1】:

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

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

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

    只要您使用 Python-Markdown 3.3+ 版并且启用了 attr_list 扩展,就可以将任意 key/value pairs 直接分配给受保护的代码块(请务必包含大括号)。

    ``` { lang=python }
    

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

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

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

    【讨论】:

    • 谢谢韦兰。我注意到我忘记启用 attr_list 扩展。现在一切看起来都很棒,但仍然没有应用突出显示! Pygements 安装成功,我创建了 styles.css 文件,现在它已链接到我的网页。
    • 即使我在 Inspect Element 面板中更改 HTML 原始脚本并将代码块部分修改为 &lt;pre lang="python"&gt;print('hi')&lt;/pre&gt; 而不是原来的样子,也没有任何反应。
    • 您确定您从模板正确链接到您的styles.css 文件吗?
    • 是的。它也在我控制台中的响应列表中,它收回了200,这意味着好的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 2018-10-04
      • 2018-12-20
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2019-11-09
      • 2022-06-24
      相关资源
      最近更新 更多