如何将HTML嵌入到iPython输出中?

Ant*_*nko 127 html python ipython jupyter-notebook

是否可以将渲染的HTML输出嵌入到iPython输出中?

一种方法是使用

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

或(IPython多线单元别名)

%%html
<a href="http://example.com">link</a>
Run Code Online (Sandbox Code Playgroud)

哪个返回格式化的链接,但是

  1. 此链接无法从控制台打开带有网页本身的浏览器.但是,IPython笔记本支持诚实的渲染.
  2. 我不知道如何HTML()在列表或pandas打印表格中渲染对象.你可以做df.to_html(),但没有在细胞内建立链接.
  3. 此输出在PyCharm Python控制台中不是交互式的(因为它不是QT).

如何克服这些缺点并使iPython输出更具交互性?

Har*_*mon 191

这似乎对我有用:

from IPython.core.display import display, HTML
display(HTML('<h1>Hello, world!</h1>'))
Run Code Online (Sandbox Code Playgroud)

诀窍是将它包装在"显示器"中.

资料来源:http://python.6.x6.nabble.com/Printing-HTML-within-IPython-Notebook-IPython-specific-prettyprint-tp5016624p5016631.html

  • 这是显示示例显示可能性的示例笔记本的链接:[Rich Output](https://nbviewer.jupyter.org/github/ipython/ipython/blob/master/examples/IPython%20Kernel/Rich%20Output.ipynb) (3认同)
  • 这个版本可以解决javascirpt吗? (2认同)
  • _display_ 部分允许我将 JavaScript 嵌入到笔记本中 (2认同)

duh*_*ime 18

前段时间,Jupyter笔记本开始从HTML内容中删除JavaScript [ #3118 ].

如果您想立即在页面上嵌入带有JavaScript的HTML页面,最简单的方法是将您的HTML上传到S3中的Amazon Web Services"存储桶",更改该存储桶上的设置以使存储桶成为主机静态网站,然后在笔记本中使用Iframe组件:

from IPython.display import IFrame

IFrame(src='./nice.html', width=700, height=600)
Run Code Online (Sandbox Code Playgroud)

这将在iframe中呈现您的HTML内容和JavaScript,就像您可以在任何其他网页上一样:

from IPython.display import IFrame

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

  • 为了获得额外分数,请从单元异步运行交互式 Web 服务器,并与它在其他单元的 iFrame 内创建的页面进行交互! (2认同)

Udi*_*Udi 11

相关:构建类时,def _reper_html_(self): ...可用于创建其实例的自定义HTML表示:

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

o = Foo()
o
Run Code Online (Sandbox Code Playgroud)

将呈现为:

你好世界!

有关更多信息,请参阅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
Run Code Online (Sandbox Code Playgroud)

将呈现:

  1. ☐买牛奶
  2. ☐做作业
  3. ☑玩视频游戏


Jos*_*rue 7

扩展@Harmon上面,看起来你可以将displayprint语句结合在一起......如果你需要的话.或者,也许将整个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>'))
Run Code Online (Sandbox Code Playgroud)

输出如下:


你好,世界!

这是一个链接:

www.google.com

一些印刷文字......

这里的段落文字......