notebook magic python html ipython jupyter-notebook

python - notebook - jupyter magic



¿Cómo incrustar HTML en la salida de iPython? (5)

¿Es posible incrustar la salida HTML renderizada en la salida de iPython?

Una forma es usar

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

o (alias de celda multilínea IPython)

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

Que devuelven un enlace formateado, pero

  1. Este enlace no abre un navegador con la propia página web desde la consola . Sin embargo, los portátiles IPython admiten la reproducción honesta.
  2. No tengo conocimiento de cómo representar un objeto HTML() dentro de, por ejemplo, una lista o una tabla impresa de pandas . Puedes hacer df.to_html() , pero sin hacer enlaces dentro de las celdas.
  3. Esta salida no es interactiva en la consola de PyCharm Python (porque no es QT).

¿Cómo puedo superar estas deficiencias y hacer que la salida de iPython sea un poco más interactiva?


Al expandirse en @Harmon arriba, parece que puede combinar la display y print declaraciones de print juntas ... si lo necesita. O tal vez es más fácil simplemente formatear todo su HTML como una cadena y luego usar la pantalla. De cualquier manera, buena característica.

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

Produce algo como esto:

¡Hola Mundo!

Aquí hay un enlace:

www.google.com

un poco más de texto impreso ...

Párrafo de texto aquí ...


Estaba buscando una respuesta específica para el cuaderno Jupyter y no pude encontrar una, así que solo dejo esto aquí:

Jupyter notebook markdown cells render html tags:

<a href="your_link_here.com">Your text here!</a>



Hace algún tiempo, Jupyter Notebooks comenzó a eliminar JavaScript del contenido HTML [ #3118 ].

Si desea incrustar una página HTML con JavaScript en su página ahora, lo más fácil es cargar su HTML en un "cubo" de servicios web de Amazon en S3, cambiar la configuración en ese cubo para que el cubo sea el anfitrión. sitio web estático, luego use un componente Iframe en su cuaderno:

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

Esto representará su contenido HTML y JavaScript en un iframe, al igual que puede hacerlo en cualquier otra página web:

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


Relacionado: Al construir una clase, def _reper_html_(self): ... se puede usar para crear una representación HTML personalizada de sus instancias:

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

se renderizará como:

Hola mundo

Para más información consulte los documentos de IPython .

Un ejemplo avanzado:

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

Renderizará:

  1. ☐ comprar leche
  2. ☐ hacer la tarea
  3. ☑ jugar videojuegos