使用 Pygments 在 Django 项目中显示 <pre> 中的行号

Posted

技术标签:

【中文标题】使用 Pygments 在 Django 项目中显示 <pre> 中的行号【英文标题】:Showing the line numbers in <pre> in Django project using Pygments 【发布时间】:2021-12-29 22:03:35 【问题描述】:

我在我的 Django 项目中使用 Pygments 包。当我尝试在我的模板中渲染代码 sn-p 时,它会将整个数据渲染如下:

模板:
...
% pygmentify %
<pre class="snippet.lang">snippet.body</pre>
% endpygmentify %
...

最终呈现的 html

<pre lang="python">
...
<span class="kn">import</span> <span class="nn">hello</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'hey'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test</span><span class="p">():</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'in the function'</span><span class="p">)</span>
...
</pre>

它实际上没有痛苦。整个代码块被正确突出显示。问题是我也想显示行号。我应该为它们设置样式还是只需要一个简单的 Pygments 配置?

谢谢。

【问题讨论】:

【参考方案1】:

如果您使用 django-pygmentify,您可以传递关键字参数,如 their docs 中所示

% pygmentify linenos='inline' %
<pre class="snippet.lang">snippet.body</pre>
% endpygmentify %

【讨论】:

它有点工作,但代码块的整个风格完全是粉笔!可以设置行号侧边栏的样式吗?就像这个关键字将 [pre-code] 样式转换为表格!我不明白。 我不知道你所说的粉笔是什么意思,但你可以为特定样式或 css 文件传递​​其他关键字,如文档链接所示。您可以调整许多选项。 @Alireza 试试新代码。 'inline' 将把它整合到
 标记中,而所有其他 linenos 值组成一个表格。
就是这样。谢谢。有什么方法可以为这些
 设置样式? (我知道我可以通过使用内部 CSS 选择器访问它们)
只需浏览我的答案中的链接以及它与 HTMLFormatter 的链接。我认为style 关键字参数可能是相关的,但我个人还没有足够的使用它来给你一个直接的答案

以上是关于使用 Pygments 在 Django 项目中显示 <pre> 中的行号的主要内容,如果未能解决你的问题,请参考以下文章

全局加载 Django“静态”模板标签库,而不在每个文件中显式加载它

id 主键是不是必须在从 inspectdb 针对现有数据库生成的 Django 模型中显式定义?

使用 Pygments 过滤空格和换行符

没有名为 Pygments 的模块

未定义的方法`highlight' Python+Pygments

(生鲜项目)07. api view实现商品列表页