2016-02-29 62 views
0

我嘗試創建一個自定義乳膠模板來從jupyter筆記本創建PDF輸出。我想以特殊方式標記單元格時取消單元格輸出。例如,讓說我編輯給定單元元數據(從筆記本/「編輯元數據」),並添加該子JSON:從jinja2模板訪問單元格元數據

[...] 
"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 *)) 

但Jinja2的抱怨,當我試圖生成我的PDF:

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

如何從一個Jinja2的細胞metdata一個訪問模板?

[編輯]使用版本:

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

'cell'變量只能在'any_cell'塊和塊內部的塊中使用。因此,他們添加的代碼已經在裏面了 - 您需要檢查'output_group'塊中的元數據,並決定是否給它內容。 –

+0

@ThomasK:感謝您的提示,它的工作原理。如果你會寫出正確的答案,我會將其標記爲解決方案。 – Nic

回答

1

細胞變量僅在那些(template structure docs)內any_cell塊和塊可用。因此,他們添加的代碼已經過時了 - 您需要檢查output_group塊內的元數據,並決定是否提供內容。例如:

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