You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django项目中使用Pygments为<pre>标签内的代码显示行号

实现代码行号显示:Pygments配置 + CSS样式结合

要给你的代码片段添加行号显示,需要同时调整Pygments的配置和添加对应的CSS样式——Pygments负责生成带行号的HTML结构,样式则让行号看起来更美观、易用。下面是具体的实现步骤:

第一步:配置Pygments生成行号

你当前使用的{% pygmentify %}标签支持通过参数开启行号功能,主要有两种行号渲染模式可选:

模式1:表格模式(推荐,行号和代码分离,样式更易控制)

修改模板中的标签,添加linenos='table'参数:

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

这种模式下,Pygments会输出一个包含两列的表格:一列是行号,一列是代码内容,结构清晰,方便单独设置行号样式。

模式2:行内模式(行号嵌入代码行开头)

如果更喜欢行号和代码在同一行内,可以用linenos='inline'参数:

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

这种模式会在每行代码前插入一个带lineno类的<span>元素作为行号。

全局配置(可选)

如果想让所有代码片段默认带行号,可以在Django项目的settings.py中添加全局配置:

PYGMENTS_FORMATTER_OPTIONS = {
    'linenos': True,
    'linenostyle': 'table',  # 替换成'inline'可切换模式
}

这样就不用在每个模板标签里重复写参数了。

第二步:添加CSS样式美化行号

不管选哪种模式,都需要CSS来优化行号的显示效果,比如让行号不可选中、和代码区分开:

表格模式对应的样式

/* 重置表格样式,避免默认边框和间距 */
.highlight table {
    border-collapse: collapse;
    width: 100%;
    margin: 1em 0;
}

/* 行号列样式 */
.highlight .linenos {
    background-color: #f5f5f5;
    padding: 0.5em 10px;
    text-align: right;
    user-select: none; /* 禁止用户选中行号 */
    color: #999;
    font-size: 0.9em;
}

/* 代码列样式 */
.highlight .code {
    padding: 0.5em 10px;
}

行内模式对应的样式

/* 行号元素样式 */
.highlight .lineno {
    display: inline-block;
    width: 35px;
    text-align: right;
    margin-right: 10px;
    color: #999;
    user-select: none;
    font-size: 0.9em;
}

为什么需要两者结合?

  • Pygments的配置是基础:它决定了是否生成行号的HTML结构,以及行号的呈现方式(表格/行内)。
  • CSS样式是优化:默认生成的行号样式可能很简陋,通过样式可以让行号和代码视觉分离,提升可读性,还能避免用户误选中行号。

按照上面的步骤操作后,你的代码片段就能正常显示行号啦!

内容的提问来源于stack exchange,提问作者Sadra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:43:17