web-dev-qa-db-ger.com

Wie binde ich HTML in die iPython-Ausgabe ein?

Ist es möglich, gerenderte HTML-Ausgabe in die iPython-Ausgabe einzubetten?

Ein Weg ist zu benutzen

from IPython.core.display import HTML
HTML('<a href="http://example.com">link</a>')

oder (IPython Multiline Cell Alias)

%%html
<a href="http://example.com">link</a>

Die einen formatierten Link zurückgeben, aber

  1. Dieser Link öffnet keinen Browser mit der Webseite selbst von der Konsole. IPython-Notebooks unterstützen jedoch ehrliches Rendern.
  2. Ich weiß nicht, wie ich HTML() -Objekte in einer Liste oder einer pandas gedruckten Tabelle rendern soll. Sie können df.to_html() ausführen, ohne jedoch Verknüpfungen innerhalb von Zellen herzustellen.
  3. Diese Ausgabe ist in der PyCharm-Konsole nicht interaktiv Python) (da es sich nicht um QT handelt).

Wie kann ich diese Mängel beheben und die iPython-Ausgabe ein bisschen interaktiver gestalten?

116
Anton Tarasenko

Das scheint bei mir zu funktionieren:

from IPython.core.display import display, HTML
display(HTML('<h1>Hello, world!</h1>'))

Der Trick ist, es auch in "Anzeige" zu wickeln.

Quelle: http://python.6.x6.nabble.com/Printing-HTML-within-IPython-Notebook-IPython-specific-prettyprint-tp5016624p5016631.html

178
Harmon

Vor einiger Zeit haben Jupyter Notebooks begonnen, JavaScript aus HTML-Inhalten zu entfernen [ # 3118 ]. Hier sind zwei Lösungen:

Lokales HTML bereitstellen

Wenn Sie jetzt eine HTML-Seite mit JavaScript in Ihre Seite einbetten möchten, ist es am einfachsten, Ihre HTML-Datei im Verzeichnis mit Ihrem Notizbuch zu speichern und die HTML dann wie folgt zu laden:

from IPython.display import IFrame

IFrame(src='./Nice.html', width=700, height=600)

Remote-HTML bereitstellen

Wenn Sie eine gehostete Lösung bevorzugen, können Sie Ihre HTML-Seite in S3 in einen "Bucket" von Amazon Web Services hochladen. Ändern Sie die Einstellungen für diesen Bucket , um den Bucket zum Host a zu machen statische Website, dann verwenden Sie eine Iframe-Komponente in Ihrem Notebook:

from IPython.display import IFrame

IFrame(src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600)

Dadurch werden Ihr HTML-Inhalt und JavaScript in einem Iframe gerendert, genau wie auf jeder anderen Webseite:

<iframe src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600></iframe>
17
duhaime

Verwandte Themen: Beim Erstellen einer Klasse kann def _reper_html_(self): ... verwendet werden, um eine benutzerdefinierte HTML-Darstellung ihrer Instanzen zu erstellen:

class Foo:
    def _repr_html_(self):
        return "Hello <b>World</b>!"

o = Foo()
o

wird gerendert als:

Hallo Welt !

Weitere Informationen finden Sie unter IPythons Dokumente .

Ein fortgeschrittenes Beispiel:

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

Wird rendern:

  1. ☐ Milch kaufen
  2. ☐ Hausaufgaben machen
  3. ☑ Spielen Sie Videospiele
9
Udi

Wenn Sie @Harmon oben erweitern, können Sie die Anweisungen display und print bei Bedarf miteinander kombinieren. Oder vielleicht ist es einfacher, Ihren gesamten HTML-Code als eine Zeichenfolge zu formatieren und dann die Anzeige zu verwenden. So oder so, nette Funktion.

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>'))

Gibt so etwas aus:


Hallo Welt!

Hier ist ein Link:

www.google.com

noch etwas gedruckter Text ...

Absatztext hier ...


7
Joseph True