Est-il possible d'incorporer une sortie HTML rendue dans une sortie iPython?
Une façon est d'utiliser
from IPython.core.display import HTML
HTML('<a href="http://example.com">link</a>')
ou (alias de cellules multilignes IPython)
%%html
<a href="http://example.com">link</a>
Ce qui retourne un lien formaté, mais
HTML()
dans une liste ou une table imprimée pandas
. Vous pouvez faire df.to_html()
, mais sans créer de liens dans les cellules.Comment puis-je surmonter ces inconvénients et rendre la sortie iPython un peu plus interactive?
Cela semble fonctionner pour moi:
from IPython.core.display import display, HTML
display(HTML('<h1>Hello, world!</h1>'))
L'astuce consiste à l'envelopper également dans "display".
Jupyter Notebooks a commencé il y a quelque temps à supprimer le contenu JavaScript du contenu HTML [ # 3118 ]. Voici deux solutions:
Gestion du code HTML local
Si vous souhaitez maintenant incorporer une page HTML avec JavaScript dans votre page, le plus simple consiste à enregistrer votre fichier HTML dans le répertoire de votre cahier, puis de charger le code HTML comme suit:
from IPython.display import IFrame
IFrame(src='./Nice.html', width=700, height=600)
Servant du HTML distant
Si vous préférez une solution hébergée, vous pouvez télécharger votre page HTML vers un "compartiment" Amazon Web Services dans S3, modifier les paramètres de ce compartiment afin de faire du compartiment héberger un site Web statique, puis utiliser un composant Iframe dans votre cahier:
from IPython.display import IFrame
IFrame(src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600)
Cela rendra votre contenu HTML et JavaScript dans une iframe, comme vous pouvez le faire sur n'importe quelle page Web:
<iframe src='https://s3.amazonaws.com/duhaime/blog/visualizations/isolation-forests.html', width=700, height=600></iframe>
Related: Lors de la construction d'une classe, def _reper_html_(self): ...
peut être utilisé pour créer une représentation HTML personnalisée de ses instances:
class Foo:
def _repr_html_(self):
return "Hello <b>World</b>!"
o = Foo()
o
rendra comme:
Bonjour Monde !
Pour plus d’informations, reportez-vous à documentation d’IPython .
Un exemple avancé:
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
Rendra:
- ☐ Acheter du lait
- ☐ faire ses devoirs
- ☑ Jouer à des jeux vidéo
En développant sur @Harmon ci-dessus, vous pouvez combiner les instructions display
et print
... si vous en avez besoin. Ou alors, il est peut-être plus facile de formater votre code HTML entier en une seule chaîne, puis d’afficher. De toute façon, fonctionnalité intéressante.
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>'))
Sort quelque chose comme ça:
Voici un lien:
encore du texte imprimé ...
Texte du paragraphe ici ...