IPython आउटपुट में HTML एम्बेड कैसे करें?


158

क्या IPython आउटपुट में प्रदान किए गए HTML आउटपुट को एम्बेड करना संभव है?

एक तरीका है उपयोग करना

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

या (आईपीथॉन मल्टीलाइन सेल उर्फ)

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

जो एक स्वरूपित लिंक लौटाते हैं, लेकिन

  1. यह लिंक वेबपेज के साथ कंसोल से स्वयं एक ब्राउज़र नहीं खोलता है । IPython पुस्तिकाएँ ईमानदार प्रतिपादन का समर्थन करती हैं, हालाँकि।
  2. मैं इस बात से अनजान हूँ HTML()कि किसी सूची या pandasमुद्रित तालिका के भीतर वस्तु को कैसे प्रस्तुत किया जाए। आप कर सकते हैं df.to_html(), लेकिन कोशिकाओं के अंदर संबंध बनाए बिना।
  3. यह आउटपुट PyCharm Python कंसोल में इंटरएक्टिव नहीं है (क्योंकि यह क्यूटी नहीं है)।

मैं इन कमियों को कैसे दूर कर सकता हूं और IPython आउटपुट को थोड़ा अधिक इंटरएक्टिव बना सकता हूं?


2
यह वही है जो आप करना चाहते हैं? ipython.org/ipython-doc/dev/config/integrating.html
cel

@ लेस्स इट फॉर्मेट एचटीएमएल आउटपुट जैसा HTML()करता है, लेकिन मैं अभी भी आइटम 1 और 2 को हल नहीं कर सका
एंटोन तारासेंको

2
मैं एक विशेषज्ञ नहीं हूं, इसलिए यह गलत हो सकता है, लेकिन मुझे लगता है कि अन्य वस्तुओं के प्रतिनिधित्व में मनमाने ढंग से HTML कोड इंजेक्ट करने से काम नहीं चलेगा। यह तर्क और एक वस्तु का प्रतिनिधित्व युगल होगा और शायद वांछनीय नहीं है। लेकिन आप सुनिश्चित करें कि आप रैपर ऑब्जेक्ट लिख सकते हैं, जिसमें मूल ऑब्जेक्ट होता है और कस्टम HTML प्रतिनिधित्व प्रदान करने के लिए repr_html विधि का उपयोग करते हैं।
cel

वास्तव में, मैंने अभी आपका कोड चलाया और यह एक अलग सेल में स्थानांतरित होते ही काम किया ...
Goodword

जावास्क्रिप्ट जोड़ना: stackoverflow.com/questions/16852885/…
एंटोन तारासेंको

जवाबों:


252

यह मेरे लिए काम करने लगता है:

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

चाल को "प्रदर्शन" में भी लपेटना है।

स्रोत: http://python.6.x6.nabble.com/Printing-HTML-within-IPython-Notebook-IPython-specific-prettyprint-tp5016624p6016631.html


2
क्या यह संस्करण javascirpt को मिटा सकता है?
यहोशू मूर

4
यहाँ प्रदर्शन संभावनाओं को दर्शाने वाले एक उदाहरण नोटबुक का लिंक दिया गया है: रिच आउटपुट
रोमेन

1
प्रदर्शन हिस्सा एक नोटबुक में एम्बेड जावास्क्रिप्ट करने के लिए मुझे अनुमति दी
lamecicle

अगर मैं डैश के साथ इसे बनाने की जरूरत है और मेरे सभी अजगर कोड ज्यूपिटर .ipynb फाइल में है, तो क्या यह वेबसाइट बनाने के लिए एक व्यवहार्य तरीका है?
user8322222

अगर मेरा मतलब यह है कि मुझे डैश और फ्लास्क से बने डैशबोर्ड वाली वेबसाइट बनाने की जरूरत है और मेरा सारा कोड जुपिटर .ipynb फाइलों में है, तो क्या मैं इस भाग को करने और लिंक करने के लिए एटम में एक अलग html और css फाइलों का उपयोग कर सकता हूं। Jupyter फ़ाइलों में कोड या मेरे सभी कोड .Ipynb फ़ाइल में होना चाहिए। इस बिंदु पर किसी भी मदद की सराहना करेंगे क्योंकि मैं इसके लिए नया हूं।
user8322222

34

कुछ समय पहले जुपिटर नोटबुक ने जावास्क्रिप्ट को HTML सामग्री [ # 3118 ] से अलग करना शुरू कर दिया था । यहाँ दो समाधान हैं:

स्थानीय HTML की सेवा

यदि आप अपने पेज पर अब जावास्क्रिप्ट के साथ एक HTML पेज एम्बेड करना चाहते हैं, तो सबसे आसान काम यह है कि अपनी HTML फाइल को अपनी नोटबुक से डायरेक्टरी में सेव करें और फिर निम्नानुसार HTML लोड करें:

from IPython.display import IFrame

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

दूरस्थ HTML की सेवा

यदि आप एक होस्ट किए गए समाधान को पसंद करते हैं, तो आप अपने HTML पृष्ठ को S3 में अमेज़न वेब सेवा "बाल्टी" पर अपलोड कर सकते हैं, उस बाल्टी पर सेटिंग्स बदल सकते हैं , ताकि बाल्टी को एक स्थिर वेबसाइट बनाने के लिए, फिर अपनी नोटबुक में एक iframe घटक का उपयोग करें:

from IPython.display import IFrame

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

यह आपके HTML कंटेंट और जावास्क्रिप्ट को iframe में रेंडर करेगा, जैसे आप किसी अन्य वेब पेज पर कर सकते हैं:

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


1
बहुत बहुत धन्यवाद। यही मैं ढूंढ रहा था। मैं अपने स्थैतिक ब्लॉग साइट में आंशिक रूप से चार्ट रेंडर करने के लिए इसका उपयोग करता हूं
Okroshiashvili

क्या AWS पर कुछ फेंकने से स्थानीय फ़ाइल आसान नहीं होगी?
vy32

1
यह पूर्ण है! वास्तव में मुझे क्या चाहिए - क्योंकि मैं अमेज़ॅन सैजमेकर से जुपिटर नोटबुक पर एक संपूर्ण वेब एप्लिकेशन होस्ट करना चाहता हूं। धन्यवाद!
आदि लेविन

2
अतिरिक्त चिह्नों के लिए, एक सेल से अतुल्यकालिक रूप से एक इंटरैक्टिव वेब सर्वर चलाएं और उन पृष्ठों के साथ इंटरैक्ट करें जो अन्य कोशिकाओं में एक iFrame के अंदर बनाता है!
होल्डनवेब


13

संबंधित: एक कक्षा का निर्माण def _repr_html_(self): ...करते समय, इसके उदाहरणों का एक कस्टम HTML प्रतिनिधित्व बनाने के लिए इस्तेमाल किया जा सकता है:

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

o = Foo()
o

के रूप में प्रस्तुत करना होगा:

नमस्ते विश्व !

अधिक जानकारी के लिए IPython के डॉक्स देखें ।

एक उन्नत उदाहरण:

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

प्रस्तुत करेगा:

  1. ☐ दूध खरीदें
  2. Ework होमवर्क करो
  3. Games वीडियो गेम खेलें

9

@ हर्मन ऊपर विस्तार करते हुए, ऐसा लगता है कि आप displayऔर printबयानों को एक साथ जोड़ सकते हैं ... यदि आपको आवश्यकता है। या, हो सकता है कि अपने संपूर्ण HTML को केवल एक स्ट्रिंग के रूप में प्रारूपित करना आसान हो और फिर प्रदर्शन का उपयोग करें। किसी भी तरह, अच्छी सुविधा।

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

आउटपुट कुछ इस तरह है:


नमस्ते दुनिया!

यहाँ एक लिंक है:

www.google.com

कुछ और मुद्रित पाठ ...

पैराग्राफ पाठ यहाँ ...


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.