使输出单元格像Markdown

时间:2012-12-07 20:19:52

标签: ipython-notebook

我喜欢IPython的Markdown单元格,用于在笔记本中集成HTML和其他丰富内容。我想知道输出单元格中是否可以类似地格式化命令输出。

以下是我输出HTML的函数之一:

    print_html():
      print """
      <h2>Matplotlib's 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(输入)单元格中,会产生与Matplotlib库的良好链接。但在输出单元格中,它只是纯文本。有什么办法让它内容丰富吗?

3 个答案:

答案 0 :(得分:17)

在此处找到解决方案:http://mail.scipy.org/pipermail/ipython-user/2012-April/009838.html

在这里为ref:

引用解决方案

Brian Granger:

” 让函数返回包含在HTML对象中的原始HTML:

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

现在调用foo()确实提供了我想要的格式化的html。

答案 1 :(得分:7)

最近在博客文章中发布了一个更先进的解决方案:

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

它创建并注册一个新的IPython魔法%%asmarkdown。您使用此命令添加的每个代码单元格的输出将呈现为纯粹的降价单元格。使用原始问题的内容,以下内容将按预期运行:

%%asmarkdown
print """
<h2>Matplotlib's 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>
"""

答案 2 :(得分:4)

只需在代码示例中添加一些额外功能

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