是否可以将渲染的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>
返回格式化链接,但
HTML()
打印的表格中呈现pandas
对象。您可以执行df.to_html()
,但不在单元格内建立链接。如何克服这些缺点并使iPython输出更具互动性?
答案 0 :(得分:160)
这似乎对我有用:
from IPython.core.display import display, HTML
display(HTML('<h1>Hello, world!</h1>'))
诀窍是将它包装在“显示器”中。
答案 1 :(得分:8)
相关:在构造类时,def _reper_html_(self): ...
可用于为其实例创建自定义HTML表示形式:
class Foo:
def _repr_html_(self):
return "Hello <b>World</b>!"
o = Foo()
o
将呈现为:
你好世界!
有关更多信息,请参见IPython's docs。
一个高级示例:
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
将渲染:
- ☐购买牛奶
- ☐做作业
- ☑玩视频游戏
答案 2 :(得分:7)
在@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>'))
输出如下内容:
这是一个链接:
更多印刷文字......
这里的段落文字......
答案 3 :(得分:2)
首先,代码:
from random import choices
def random_name(length=6):
return "".join(choices("abcdefghijklmnopqrstuvwxyz", k=length))
# ---
from IPython.display import IFrame, display, HTML
import tempfile
from os import unlink
def display_html_to_frame(html, width=600, height=600):
name = f"temp_{random_name()}.html"
with open(name, "w") as f:
print(html, file=f)
display(IFrame(name, width, height), metadata=dict(isolated=True))
# unlink(name)
def display_html_inline(html):
display(HTML(html, metadata=dict(isolated=True)))
h="<html><b>Hello</b></html>"
display_html_to_iframe(h)
display_html_inline(h)
一些简要说明:
metadata=dict(isolated=True)
不能如older documentation所示在IFrame中隔离结果。看来可以防止clear-fix
重置所有内容。该标记不再记录:我刚刚发现使用它可以允许某些display: grid
样式正确呈现。IFrame
解决方案将写入一个临时文件。您可以按照here的说明使用数据uri,但这会使调试输出变得困难。 Jupyter IFrame
函数不具有data
或srcdoc
属性。tempfile
模块创建不可与其他进程共享,因此random_name()
无法共享。HTML('Hello, <b>world</b>')
,它将返回其返回值。在函数中,如上操作,使用display(HTML(...))
。这也使您可以自由地混合display
和print
呼叫。答案 4 :(得分:0)
要在循环中执行此操作,您可以:
display(HTML("".join([f"<a href='{url}'>{url}</a></br>" for url in urls])))
这实质上是在循环中创建 html 文本,然后使用 display(HTML()) 构造将整个字符串显示为 HTML
答案 5 :(得分:-2)
我一直在寻找一个Jupyter笔记本特定的答案而无法找到答案,所以我就把它留在这里:
Jupyter笔记本降价单元格渲染html标签:
<a href="your_link_here.com">Your text here!</a>