问题:如何将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>
哪个返回格式化的链接,但是
- 此链接不会从控制台打开带有网页本身的浏览器。不过,IPython笔记本支持诚实渲染。
- 我不知道如何
HTML()
在列表或pandas
打印表中呈现对象。您可以这样做df.to_html()
,但无需在单元格内建立链接。 - 此输出在PyCharm Python控制台中不是交互式的(因为它不是QT)。
如何克服这些缺点并使IPython输出更具交互性?
回答 0
这似乎为我工作:
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
回答 1
一段时间以前,Jupyter Notebooks开始从HTML内容中剥离JavaScript [ #3118 ]。这是两个解决方案:
提供本地HTML
如果要立即在页面上嵌入带有JavaScript的HTML页面,最简单的方法是使用笔记本将HTML文件保存到目录中,然后按以下方式加载HTML:
from IPython.display import IFrame
IFrame(src='./nice.html', width=700, height=600)
提供远程HTML
如果您喜欢托管解决方案,则可以在S3中将HTML页面上传到Amazon Web Services“存储桶”,更改该存储桶上的设置,以使该存储桶托管静态网站,然后在笔记本中使用Iframe组件:
from IPython.display import IFrame
IFrame(src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600)
就像在其他任何网页上一样,这将在iframe中呈现HTML内容和JavaScript:
<iframe src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600></iframe>
回答 2
相关:在构造类时,def _repr_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
将呈现:
- ☐购买牛奶
- ☐做作业
- ☑玩电子游戏
回答 3
在上面的@Harmon上展开,看来您可以将display
and 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>'))
输出如下所示:
你好,世界!
这里是一个链接:
一些更多的印刷文字…
此处的段落文字…