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

如何扩展nbconvert Markdown模板:隐藏代码块保留代码输出

解决nbconvert隐藏代码块但保留输出的问题

我之前也碰到过类似的坑,nbconvert的文档确实对Jinja2新手不太友好。下面给你两种解决方案,分别对应全局隐藏所有代码和按单元格元数据选择性隐藏的场景:

方案1:全局隐藏所有代码,只保留输出

创建一个名为my_template.tpl的模板文件,内容如下:

{% extends 'markdown.tpl' %}

# 完全覆盖代码单元格的输入渲染逻辑,不输出任何代码
{% block codecell %}
{% endblock codecell %}

这个模板继承了官方默认的Markdown模板,只修改了codecell块——把原本渲染代码的逻辑清空,这样所有代码块的输入都会被隐藏,但输出会按照默认规则正常渲染。

使用命令:

jupyter nbconvert --to markdown --template my_template.tpl my_notebook.ipynb

对你的示例代码来说,输出就会是你想要的:

# Title
This is text
`this is code`

方案2:按单元格元数据选择性隐藏代码

如果你只想隐藏带有hide_input: true元数据的单元格代码,其他单元格正常显示,可以用这个模板:

{% extends 'markdown.tpl' %}

{% block codecell %}
    {% if not cell.metadata.get('hide_input', False) %}
        ```python
        {{ cell.source }}
        ```
    {% endif %}
{% endblock codecell %}

这样只有当单元格的元数据里包含{"hide_input": true}时,代码才会被隐藏,其他单元格的代码和输出都会正常显示。

为什么你之前的模板没生效?

你之前的写法有两个问题:

  1. 没有继承默认模板:直接写{% block data_codecell %}但没继承markdown.tpl,导致模板上下文缺失,输出逻辑没被触发;
  2. 输出处理不完整:只针对text/markdown类型的输出做了处理,没有遍历所有输出,也没覆盖其他输出类型(比如文本、图片等)的渲染逻辑。

关于nbconvert模板的小提示

  • 你可以用jupyter nbconvert --show-config查看默认模板的存储路径,直接打开官方的markdown.tpl文件,就能看到所有可覆盖的块结构,比官方文档直观多了;
  • 每个输出类型(比如execute_result、display_data、stream)都有对应的Jinja块,如果你需要自定义某类输出的渲染方式,可以单独覆盖对应的块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:55