it-roy-ru.com

Как встроить HTML в вывод iPython?

Можно ли встраивать визуализированный вывод HTML в вывод iPython?

Одним из способов является использование

from IPython.core.display import HTML
HTML('<a href="http://example.com">link</a>')

или (многострочный псевдоним IPython)

%%html
<a href="http://example.com">link</a>

Которые возвращают отформатированную ссылку, но

  1. Эта ссылка не открывает браузер с самой веб-страницей из консоли. Но ноутбуки IPython поддерживают честный рендеринг.
  2. Я не знаю, как отобразить объект HTML(), скажем, в списке или в печатной таблице pandas. Вы можете делать df.to_html(), но без создания ссылок внутри ячеек.
  3. Этот вывод не является интерактивным в консоли PyCharm Python (потому что это не QT).

Как я могу преодолеть эти недостатки и сделать вывод iPython более интерактивным?

108
Anton Tarasenko

Кажется, это работает для меня:

from IPython.core.display import display, HTML
display(HTML('<h1>Hello, world!</h1>'))

Хитрость заключается в том, чтобы обернуть его в "дисплей".

Источник: http://python.6.x6.nabble.com/Printing-HTML-within-IPython-Notebook-IPython-specific-prettyprint-tp5016624p5016631.html

165
Harmon

Некоторое время назад Jupyter Notebooks начал извлекать JavaScript из HTML-контента [ # 3118 ]. Вот два решения:

Обслуживание локального HTML

Если вы хотите встроить HTML-страницу с JavaScript на свою страницу сейчас, проще всего сохранить свой HTML-файл в каталоге с записной книжкой, а затем загрузить HTML следующим образом:

from IPython.display import IFrame

IFrame(src='./Nice.html', width=700, height=600)

Обслуживание удаленного HTML

Если вы предпочитаете хостинговое решение, вы можете загрузить свою HTML-страницу в "корзину" Amazon Web Services в S3, изменить настройки этой корзины , чтобы сделать хост хоста статическим веб-сайтом, а затем использовать компонент Iframe в вашей записной книжке:

from IPython.display import IFrame

IFrame(src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600)

Это отобразит ваш HTML-контент и JavaScript в iframe, как и на любой другой веб-странице:

<iframe src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600></iframe>
11
duhaime

Связанный: при создании класса, def _reper_html_(self): ... может использоваться для создания собственного HTML-представления его экземпляров:

class Foo:
    def _repr_html_(self):
        return "Hello <b>World</b>!"

o = Foo()
o

будет отображаться как:

Привет Мир !

Для получения дополнительной информации обратитесь к Документы IPython .

Продвинутый пример:

from html import escape # Python 3 only :-)

class Todo:
    def __init__(self):
        self.items = []

    def add(self, text, completed):
        self.items.append({'text': text, 'completed': completed})

    def _repr_html_(self):
        return "<ol>{}</ol>".format("".join("<li>{} {}</li>".format(
            "☑" if item['completed'] else "☐",
            escape(item['text'])
        ) for item in self.items))

my_todo = Todo()
my_todo.add("Buy milk", False)
my_todo.add("Do homework", False)
my_todo.add("Play video games", True)

my_todo

Окажет:

  1. ☐ купить молоко
  2. ☐ делать домашнее задание
  3. ☑ играть в видеоигры
9
Udi

Если остановиться на @Harmon выше, похоже, что вы можете объединить операторы display и print вместе ... если вам нужно. Или, может быть, проще просто отформатировать весь HTML-код в одну строку, а затем использовать отображение. В любом случае, приятная особенность.

display(HTML('<h1>Hello, world!</h1>'))
print("Here's a link:")
display(HTML("<a href='http://www.google.com' target='_blank'>www.google.com</a>"))
print("some more printed text ...")
display(HTML('<p>Paragraph text here ...</p>'))

Выводит что-то вроде этого:


Привет, мир!

Вот ссылка:

www.google.com

еще немного печатного текста ...

Текст абзаца здесь ...


7
Joseph True