Come convertire un notebook IppyThon in HTML con uscita collassata (e / o input)
-
26-12-2019 - |
Domanda
Ho un ipython notebook
che vorrei condividere con colleghi che potrebbero non avere IppyThon installato.
Quindi l'ho convertito in HTML con:
ipython nbconvert my_notebook.ipynb
.
Ma il mio problema è che ho uscite molto lunghe che rendono difficile la lettura, e mi piacerebbe sapere se è possibile avere il collasso o l'opzione di scorrimento del visualizzatore del notebook sulla versione HTML.
Fondamentalmente, vorrei questo: Esempio di output
Ma nella versione HTML.È anche possibile?
Grazie per aver aiutato!
Soluzione
Ho trovato quello che volevo grazie a quello Blog che fa esattamente cosa volevo.
L'ho modificato un po 'per farlo funzionare con IppyThon 2.1 [Modifica: funziona ASLO con Jupyter] e miscelato i trucchi di input e di output hidding.
cosa fa:
Quando si apre il file HTML, tutti gli ingressi verranno visualizzati e verranno visualizzati nascosti. Facendo clic sul campo di input, mostrerà il campo di uscita. E una volta che hai entrambi i campi, puoi nasconderne uno facendo clic sull'altro.
Modifica: ora nasconde un lungo ingresso, e circa 1 riga è sempre mostrata (da defa. Puoi mostrare tutto facendo clic sul numero di ingresso. Questo è conveniente quando non si ha un'uscita (come una definizione di un lungo periodo Funzione che ti piacerebbe nascondere nel tuo html doc)
È necessario aggiungere un modello mentre si esegue NbConvert:
ipython nbconvert --template toggle my_notebook.ipynb
.
DOVE TOGGLE è un file contenente:
{%- extends 'full.tpl' -%}
{% block output_group %}
<div class="output_hidden">
{{ super() }}
</div>
{% endblock output_group %}
{% block input_group -%}
<div class="input_hidden">
{{ super() }}
</div>
{% endblock input_group %}
{%- block input -%}
<div class="in_container">
<div class="in_hidden">
{{ super() }}
<div class="gradient">
</div>
</div>
</div>
{%- endblock input -%}
{%- block header -%}
{{ super() }}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
div.output_wrapper {
margin-top: 0px;
}
.output_hidden {
display: block;
margin-top: 5px;
}
.in_hidden {
width: 100%;
overflow: hidden;
position: relative;
}
.in_container {
width: 100%;
margin-left: 20px;
margin-right: 20px;
}
.gradient {
width:100%;
height:3px;
background:#eeeeee;
position:absolute;
bottom:0px;
left:0;
display: none;
opacity: 0.4;
border-bottom: 2px dashed #000;
}
div.input_prompt {
color: #178CE3;
font-weight: bold;
}
div.output_prompt {
color: rgba(249, 33, 33, 1);
font-weight: bold;
}
</style>
<script>
$(document).ready(function(){
$(".output_hidden").click(function(){
$(this).prev('.input_hidden').slideToggle();
});
$(".input_hidden").click(function(){
$(this).next('.output_hidden').slideToggle();
});
var slideHeight = 25;
$(".in_container").each(function () {
var $this = $(this);
var $in_hidden = $this.children(".in_hidden");
var defHeight = $in_hidden.height();
if (defHeight >= 61) {
var $prompt = $this.prev(".input_prompt");
var $gradient = $in_hidden.children(".gradient");
$in_hidden.css("height", slideHeight + "px");
$gradient.css("display", "block");
$prompt.click(function () {
var curHeight = $in_hidden.height();
if (curHeight == slideHeight) {
$in_hidden.animate({
height: defHeight
}, "normal");
$gradient.fadeOut();
}
else {
$in_hidden.animate({
height: slideHeight
}, "normal");
$gradient.fadeIn();
}
return false;
});
}
});
});
</script>
{%- endblock header -%}
.
Fondamentalmente, puoi iniettare qualsiasi JavaScript e CSS che vuoi personalizzare il tuo notebook a volontà!
Divertiti!
Altri suggerimenti
IppyThon 2.0 ora include il salvataggio su HTML direttamente all'interno del notebook.
Le barre di scorrimento sono state create automaticamente con linee> 100 in una versione precedente. Docs Se ancora mostrano, la tua uscita HTML dovrebbe avere anche ilBar, no?
È possibile utilizzare il seguente codice per convertire il notebook in HTML con il codice come crollato.
from IPython.display import HTML
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')
.