Создание выходных ячеек, таких как Markdown

Мне нравятся ячейки IPython Markdown для включения HTML и другого богатого контента внутри ноутбуков. Я хотел бы знать, можно ли форматировать вывод команды в ячейках вывода.

Вот одна из моих функций вывода HTML:

    print_html():
      print """
      <h2>Matplotlib chart gallery (Click a chart to see the code to create it)</h2><br>
      <div align="center"> <iframe title="Matplotlib Gallery" width="950"
      height="250" src="http://matplotlib.org/gallery.html#api" frameborder="0"
      allowfullscreen></iframe></div>
    """

HTML-код выше, если он помещен в ячейку markdown (input), создает хорошую ссылку на библиотеку Matplotlib. Но в выходной ячейке это просто текст. Любой способ сделать его богатым?

Ответы

Ответ 1

Нашел решение здесь: http://mail.scipy.org/pipermail/ipython-user/2012-April/009838.html

Задание решения здесь для ссылки:

Брайан Грейнджер:

" Попросите функцию вернуть необработанный HTML, заключенный в HTML-объект:

from IPython.core.display import HTML
...
...
def foo():
    raw_html = "<h1>Yah, rendered HTML</h1>"
    return HTML(raw_html)

"

Теперь вызов foo() действительно дает богатый форматированный html, как я хотел.

Ответ 2

Как-то более продвинутое решение было недавно опубликовано в блоге:

http://guido.vonrudorff.de/ipython-notebook-code-output-as-markdown/

Создает и регистрирует новую магию IPython %%asmarkdown. Вывод каждой кодовой ячейки, которую вы добавили с помощью этой команды, будет отображаться как чистые ячейки разметки. Используя содержимое исходного вопроса, следующее будет вести себя так, как ожидалось:

%%asmarkdown
print """
<h2>Matplotlib chart gallery (Click a chart to see the code to create it)</h2><br>
<div align="center"> <iframe title="Matplotlib Gallery" width="950"
height="250" src="http://matplotlib.org/gallery.html#api" frameborder="0"
allowfullscreen></iframe></div>
"""

Ответ 3

Просто добавьте некоторые дополнительные функции в пример кода

htmlContent = ''

def header(text):
    raw_html = '<h1>' + str(text) + '</h1>'
    return raw_html

def box(text):
    raw_html = '<div style="border:1px dotted black;padding:2em;">'+str(text)+'</div>'
    return raw_html

def addContent(raw_html):
    global htmlContent
    htmlContent += raw_html


# Example
addContent( header("This is a header") )
addContent( box("This is some text in a box") )

from IPython.core.display import HTML
HTML(htmlContent)

дает вам следующее:

OUTPUT