2012-12-07 9 views
15

Lubię komórki Markdown IPython do włączenia HTML i innych treści bogatych w notebookach. Chciałbym wiedzieć, czy dane wyjściowe polecenia mogą być sformatowane podobnie, w komórkach wyjściowych.Tworzenie komórek wyjściowych, takich jak Markdown

Oto jeden z moich funkcji transmitują 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> 
    """ 

Kod HTML powyżej, jeśli są umieszczone w wyprzedaży (wejście) komórki, produkuje miły link do biblioteki matplotlib. Ale w komórce wyjściowej jest to zwykły tekst. Jakikolwiek sposób na wzbogacenie treści?

+0

Rozwiązania tej pory działa tylko dla funkcji, które wymagają bezpośrednio od ipython - co, jeśli chcemy do renderowania HTML w druku/metody rejestrowania zwanych od wewnątrz funkcja? – Peter

Odpowiedz

16

znalazł rozwiązanie tutaj: http://mail.scipy.org/pipermail/ipython-user/2012-April/009838.html

powołując się na rozwiązanie tutaj Ref:

Brian Granger:

" posiadają funkcję powrotu surowego HTML zawinięte w obiekcie HTML:

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

"

Teraz wywołanie foo() daje sformatowany HTML, tak jak chciałem.

+1

Jak wskazuje połączona poczta, musisz zaimportować HTML w następujący sposób: z IPython.core.display import HTML – GermanK

+0

Dziękujemy za ulepszenie tej odpowiedzi! –

+0

Ale nie możesz tego wymieszać z pewnym nadrukiem. Tak jak tworzenie nagłówka i drukowanie tekstu poniżej – Norfeldt

4

Wystarczy dodać kilka dodatkowych funkcji do przykładu kodu

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) 

daje to:

OUTPUT

+0

miło zobaczyć ciekawe funkcje! –

7

jakoś bardziej zaawansowane rozwiązanie zostało niedawno opublikowane w blogu tutaj:

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

Tworzy i rejestruje nową magię IPython %%asmarkdown. Dane wyjściowe każdej komórki kodowej, które zostały poprzedzone tym poleceniem, będą renderowane jak czyste komórki przechwytujące. Korzystanie z treści pierwotnego pytania, następujące będzie zachowywać się zgodnie z oczekiwaniami:

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

To działało bardzo łatwo. Niewielki wyjątek, dla użytkowników Pythona 3, dodawanie 'from io import StringIO' zamiast' from stringIO import StringIO'. – josh

+0

To jest rozwiązanie, które najlepiej odpowiada na oryginalne pytanie. –

Powiązane problemy