RenderScripts
RenderScripts 是常规 Python 脚本,不同之处在于
- 它们不仅仅是
.py
扩展名,而是像.qmd.py
这样的扩展名 - 它们包含一个模块 docstring,其中包含 frontmatter(即一行三个连字符,然后是一些 yaml,再一行三个连字符)。
这些脚本在您的站点渲染时运行。它们打印到 stdout 的任何内容都会成为您站点中的一个新文件。文件的名称与 .py 脚本的名称相同,但不带 .py
扩展名。例如,您当前正在阅读的页面就是由一个名为 renderscript.qmd.py
的脚本创建的,您可以在此处找到该脚本。
Hot/live reloading(热重载/实时重载)甚至对这些 .py 脚本也有效 – 因此一旦您保存脚本,您就会在网络浏览器中看到新的输出。
这种方法对于生成数据驱动的文档特别有用。例如,考虑这个表格,它包含 nbdev 主页上提供推荐的人员列表
姓名 | 职位 | |
---|---|---|
![]() |
Chris Lattner | Swift 和 LLVM 的发明者 |
![]() |
Fernando Pérez | Jupyter 的创建者 |
![]() |
David Berg | 软件工程师,Netflix |
![]() |
Erik Gaasedelen | 软件工程师,Lyft |
![]() |
Roxanna Pourzand | 产品经理,Transform |
![]() |
Hugo Bowne-Anderson | 开发者关系主管,Outerbounds |
在创建这样的表格时,要确保每行的 markdown 都正确且一致可能会很棘手。通过编程方式生成它会更容易且更易于维护。上面的表格是由以下 python 列表生成的
= [
testimonials 'chris-lattner.png', 'Chris Lattner', 'Inventor of Swift and LLVM'),
('fernando-pérez.jpeg', 'Fernando Pérez', 'Creator of Jupyter'),
('david-berg.jpeg', 'David Berg', 'Software Engineer, Netflix'),
('erik-gaasedelen.jpeg', 'Erik Gaasedelen', 'Software Engineer, Lyft'),
('roxanna-pourzand.jpeg', 'Roxanna Pourzand', 'Product Manager, Transform'),
('hugo-bowne-anderson.jpeg', 'Hugo Bowne-Anderson', 'Head of Developer Relations, Outerbounds')
( ]
要从这个 python 列表生成表格,使用了以下四行代码
print(qmd.tbl_row(['','Name','Position']))
print(qmd.tbl_sep([1,3,4]))
for fname,name,position in testimonials:
print(qmd.tbl_row([im(fname, 60), name, position]))
tbl_hdr
和 tbl_row
是从模块 nbdev.qmd
导入的两个函数。nbdev.qmd
是一个小型模块,包含一些用于创建 .qmd
文档的便捷函数,例如上面使用的表格创建函数。您可以在 index.qmd.py 中看到更多使用示例,它是创建 nbdev 主页 的 RenderScript。nbdev 主页是比当前页面源代码更惯用的 RenderScripts 使用示例 – 我们只在当前页面使用 RenderScript 是为了提供一个更简单的示例。实际上,我们发现 RenderScripts 最适合用于包含大量数据驱动内容、可重用组件等的页面。
您可以使用 RenderScripts 创建任何类型的文件。例如,下面的 SVG 是使用此脚本动态创建的
运行 nbdev_preview
或 nbdev_docs
后,您会在 _proc
目录中找到渲染后的文档,以及所有已处理的 notebook。这有助于调试。您也可以直接从 shell 调用脚本(例如 python renderscript.qmd.py
)来查看打印的输出。