Как преобразовать блокнот ipython в html со свернутым выводом (и/или вводом)

У меня есть ipython notebook, которым я хотел бы поделиться с коллегами, у которых может не быть установлен ipython.

Поэтому я преобразовал его в html с помощью:

ipython nbconvert my_notebook.ipynb

Но моя проблема в том, что у меня очень длинные выходные данные, которые затрудняют чтение, и я хотел бы знать, возможно ли иметь опцию сворачивания или прокрутки средства просмотра блокнотов в html-версии.

В принципе, мне бы хотелось следующее: пример вывода< /strong> введите здесь описание изображения

Но в html версии. Это вообще возможно?

Спасибо за помощь !


person jrjc    schedule 05.06.2014    source источник


Ответы (3)


Я нашел то, что хотел, благодаря этому блогу который делает именно то, что я хотел.

Я немного изменил его, чтобы он работал с ipython 2.1 [редактировать: работает также с Jupyter], и смешал приемы скрытия ввода и вывода.

Что оно делает:

При открытии html-файла все вводимые данные будут отображаться, а выходные данные скрыты. Нажав на поле ввода, вы увидите поле вывода. И когда у вас есть оба поля, вы можете скрыть одно, щелкнув другое.

редактировать: теперь он скрывает длинный ввод, и всегда отображается около 1 строки (по дефа. Вы можете показать все, нажав на номер ввода. Это удобно, когда у вас нет вывода (например, определение длинной функции, которую вы' хотел бы спрятать в вашем HTML-документе)

Вам нужно добавить шаблон при выполнении nbconvert :

ipython nbconvert --template toggle my_notebook.ipynb

где toggle — это файл, содержащий:

{%- 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 -%}

По сути, вы можете внедрить любые javascript и css, которые вы хотите настроить в своем блокноте по своему желанию!

Радоваться, веселиться !

person jrjc    schedule 05.06.2014
comment
ссылка изменена на damianavila.github.io/blog /сообщения/ - person ajp619; 29.01.2019

Ipython 2.0 теперь поддерживает сохранение в HTML непосредственно в записной книжке.

Полосы прокрутки автоматически создавались со строками> 100 в более старой версии. Документы Если они все еще отображаются, ваш HTML-вывод также должен иметь бары, нет?

person Union find    schedule 05.06.2014
comment
mmh У меня Ipython 2.1, так что, возможно, это так, но автопрокрутка, похоже, отключена в Firefox. Автосвертывание длинных выходов отключено в Firefox из-за ошибок в его поведении прокрутки. Подробности см. в PR № 2047. (по вашей ссылке) - person jrjc; 05.06.2014
comment
Попробуйте 3.0, сохраняя в Chrome? - person Union find; 05.06.2014
comment
3.0 все еще находится в разработке, и я нашел решение. Спасибо - person jrjc; 05.06.2014
comment
Я сделал ошибку -- 2.0 включает загрузку в html из блокнота. Вы, кажется, готовы, хотя. - person Union find; 05.06.2014
comment
Обратите внимание, что у меня есть горизонтальная прокрутка, например, для больших таблиц (без какого-либо javascript от меня) - person jrjc; 05.06.2014

Вы можете использовать приведенный ниже код, чтобы преобразовать блокнот в HTML со свернутым кодом.

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>''')
person Tanveer    schedule 20.08.2019