2012-12-07 4 views
15

Ich mag IPython Markdown-Zellen für die Integration von HTML und andere reiche Inhalte in Notebooks. Ich würde gerne wissen, ob eine Befehlsausgabe in Ausgabezellen ähnlich formatiert werden kann.Machen Sie Ausgangszellen wie Markdown

Hier ist einer meiner Funktionen HTML-Ausgabe von:

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> 
    """ 

Der HTML-Code oben gebracht werden, wenn in Abschlag (Eingang) Zelle, schöne Verbindung zur Matplotlib Bibliothek erzeugt. Aber in der Ausgabezelle ist es nur einfacher Text. Irgendeine Möglichkeit, es zu reichen Inhalten zu machen?

+0

Lösungen so funktioniert bisher nur für Funktionen, die Sie direkt aus IPython nennen - was ist, wenn wir html in Druck/Logging-Methoden aus aufgerufen machen wollen eine Funktion? – Peter

Antwort

16

hier eine Lösung gefunden: http://mail.scipy.org/pipermail/ipython-user/2012-April/009838.html

die Lösung hier für ref Zitiert:

Brian Granger:

" haben die Funktion, den rohen HTML in ein HTML-Objekt eingewickelt zurück:

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

"

Jetzt ruft foo() reich formatiert HTML wie ich wollte.

+1

Wie die verknüpfte Mail darauf hinweist, müssen Sie HTML wie folgt importieren: von IPython.core.display HTML – GermanK

+0

Dank für die Verbesserung dieser Antwort! –

+0

Aber Sie können es nicht mit etwas Druck mischen. Also, als würde man eine Kopfzeile erstellen und einen Text ausdrucken lassen unter – Norfeldt

4

Hinzufügen nur einige zusätzliche Funktion, um Ihren Code Beispiel

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) 

gibt Ihnen dies:

OUTPUT

+0

schön, um die ausgefallenen Funktionen zu sehen! –

7

Eine irgendwie fortgeschrittenere Lösung kürzlich in einem Blog-Eintrag hier veröffentlicht wurde:

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

Es erstellt und registriert eine neue IPython Magie %%asmarkdown. Die Ausgabe jeder Codezelle, die Sie mit diesem Befehl vorgeben, wird wie reine Markdown-Zellen gerendert. Mit den Inhalt der ursprünglichen Frage, nach dem sich verhalten würde, wie erwartet:

%%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> 
""" 
+1

Das hat super funktioniert. Die kleine Ausnahme von, für Python 3 Benutzer, '' from io import StringIO' anstelle von 'from stringIO import StringIO' hinzuzufügen. – josh

+0

Dies ist die Lösung, die die ursprüngliche Frage am besten beantwortet. –