मेरे पास निम्नलिखित है जो IPython 2.0 के साथ काम करता है। मैंने देखा कि नोटबुक का नाम पेज 'data-notebook-name'
के <body>
टैग में विशेषता के मूल्य के रूप में संग्रहीत है । इस प्रकार यह विचार सबसे पहले है कि जावास्क्रिप्ट को विशेषता को पुनः प्राप्त करने के लिए कहा जाए - javascripts को मैजिक के लिए एक कोडेक्स धन्यवाद से लाया जा सकता %%javascript
है। फिर पायथन कर्नेल को कॉल के माध्यम से जावास्क्रिप्ट चर तक पहुंचना संभव है, एक पायनियर चर सेट करता है। चूंकि यह अंतिम चर कर्नेल से जाना जाता है, इसलिए इसे अन्य कोशिकाओं में भी एक्सेस किया जा सकता है।
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
एक पायथन कोड सेल से
print(theNotebook)
बाहर []: HowToGetTheNameOfTheNoteBook.ipynb
इस समाधान में एक दोष यह है कि जब कोई नोटबुक का शीर्षक (नाम) बदलता है, तो यह नाम तुरंत अपडेट नहीं किया जाता है (शायद किसी प्रकार का कैश है) और एक्सेस प्राप्त करने के लिए नोटबुक को फिर से लोड करना आवश्यक है नया नाम।
[संपादित करें] प्रतिबिंब पर, <body>
टैग के बजाय नोटबुक के नाम के लिए इनपुट फ़ील्ड देखने के लिए एक अधिक कुशल समाधान है । स्रोत को देखते हुए, यह प्रतीत होता है कि इस फ़ील्ड में आईडी "नोटबुक_नाम" है। तब इस मूल्य को ए द्वारा पकड़ना संभव है document.getElementById()
और फिर ऊपर के समान दृष्टिकोण का पालन करें। कोड, अभी भी जावास्क्रिप्ट जादू का उपयोग कर बन जाता है
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
फिर, एक ipython cell से,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
पहले समाधान के विपरीत, नोटबुक के नाम के संशोधनों को तुरंत अपडेट किया जाता है और नोटबुक को ताज़ा करने की आवश्यकता नहीं होती है।