从 jinja2 模板访问单元元数据
accessing cell metadata from jinja2 template
我尝试创建自定义乳胶模板以从 jupyter 笔记本创建 PDF 输出。当以特殊方式标记单元格时,我想取消单元格输出。例如,假设我编辑给定单元格的元数据(来自笔记本/"Edit metadata")并添加此子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
单元格变量仅在 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 *))
我尝试创建自定义乳胶模板以从 jupyter 笔记本创建 PDF 输出。当以特殊方式标记单元格时,我想取消单元格输出。例如,假设我编辑给定单元格的元数据(来自笔记本/"Edit metadata")并添加此子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
单元格变量仅在 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 *))