【问题标题】:accessing cell metadata from jinja2 template从 jinja2 模板访问单元元数据
【发布时间】:2016-02-29 16:06:15
【问题描述】:

我尝试创建一个自定义乳胶模板以从 jupyter 笔记本创建 PDF 输出。当以特殊方式标记单元格时,我想取消单元格输出。例如,假设我编辑给定单元格的元数据(来自笔记本/“编辑元数据”)并添加此子 json:

[...]
"tpl": {
    "view_in": true,
    "view_out": false
},
[...]

然后,我尝试使用cell 变量来推导模板,如http://nbconvert.readthedocs.org/en/latest/customizing.html#Templates-that-use-cell-metadata 所示:

% ((*- extends 'report.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))
% disable output if required from metadata
((* if cell['metadata'].get('tpl', {}).get('view_out', True) == true *))
    ((* block output_group  *))
    ((* endblock output_group  *))
((* endif *))

但是当我尝试生成我的 PDF 时 jinja2 抱怨:

$ jupyter nbconvert --to pdf C4_RevD.ipynb --template=tpl.tpl
    [...]
    jinja2.exceptions.UndefinedError: 'cell' is undefine

如何从 jinja2 模板访问单元元数据?

使用的[编辑]版本:

Python: 2.7.6
jupyter: 4.0.6
jupyter notebook: 4.1.0
jinja2: 2.8

【问题讨论】:

  • cell 变量仅在 any_cell 块和其中的块中可用。所以他们添加的代码是由内而外的——你需要检查 output_group 块内的元数据,并决定是否给它内容。
  • @ThomasK:感谢您的提示,它有效。如果您能写出正确的答案,我会将其标记为解决方案。

标签: jinja2 jupyter-notebook


【解决方案1】:

cell 变量仅在 any_cell 块和其中的块中可用 (template structure docs)。所以他们添加的代码是由内而外的——你需要检查 output_group 块内的元数据,并决定是否给它内容。像这样的:

((* block output_group  *))
    ((* if cell['metadata'].get('tpl', {}).get('view_out', True) == true *))
        ((* super() *))
    ((* endif *))
((* endblock output_group  *))

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2021-11-02
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多