मुख्य सामग्री पर जाएं

Jinja2 के साथ Jupyter Notebooks के लिए कस्टम टेम्पलेट्स

Jinja2 का उपयोग करके अपने Jupyter Notebooks के लिए कस्टम एक्सपोर्ट टेम्पलेट्स बनाना सीखें।
अपडेट किया गया 25 सित॰ 2026  · 10 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

डेटा साइंस में, आपको अक्सर अपने काम की रिपोर्ट बनानी होती है ताकि निर्णय लेने वालों या अन्य गैर-तकनीकी कर्मियों को दिखा सकें। अपने Jupyter Notebook को एक स्थिर PDF या HTML दस्तावेज़ में बदलना उन सहयोगियों के लिए अधिक उपयोगी होता है जिनके पास Python या Jupyter इंस्टॉल नहीं है। Python दस्तावेज़ों को बदलने के लिए nbconvert नामक लाइब्रेरी और Jinja2 नामक टेम्पलेटिंग भाषा का उपयोग करता है। टेम्पलेट यह परिभाषित करते हैं कि किसी दस्तावेज़ को वेबपेज पर या किसी अन्य आउटपुट फॉर्मेट में कैसे प्रदर्शित किया जाएगा। टेम्पलेट्स को कस्टमाइज़ करना समझना आपके Notebooks की आकर्षक रिपोर्ट बनाने के लिए लाभदायक है।

Jupyter notebooks आपके ब्राउज़र में Python कोड चलाने का एक तरीका हैं। यदि आप Python के बारे में और सीखना चाहते हैं, तो हमारे निःशुल्क Intro to Python for Data Science कोर्स पर एक नज़र अवश्य डालें।

इस ट्यूटोरियल में, आप निम्नलिखित विषयों को कवर करेंगे:

  • टेम्पलेट्स और Jinja2 टेम्पलेट डिज़ाइनर।
  • टेम्पलेट्स को रेंडर करना और इनहेरिटेंस।
  • अपने Notebooks को एक्सपोर्ट करने के लिए nbconvert का उपयोग कैसे करें।
  • HTML एक्सपोर्ट के लिए Jupyter के डिफ़ॉल्ट टेम्पलेट्स को बढ़ाने का वाक्य-विन्यास और संरचना।
  • LaTeX और PDF फॉर्मेट्स में एक्सपोर्ट करने के अंतर।

टेम्पलेट्स क्या हैं?

Python विकि से: "Templating, विशेष रूप से वेब टेम्पलेटिंग, डेटा को अलग-अलग रूपों में प्रस्तुत करने का एक तरीका है... अक्सर, टेम्पलेटिंग समाधान में एक दस्तावेज़ (टेम्पलेट) और डेटा शामिल होते हैं। टेम्पलेट आमतौर पर अंतिम आउटपुट की तरह दिखते हैं, जिसमें वास्तविक डेटा के स्थान पर प्लेसहोल्डर होते हैं"

Jupyter Notebook को आसानी से File -> Download As (Jupyter Lab में, आपको Export Notebook As दिखाई देगा) का उपयोग करके एक्सपोर्ट किया जा सकता है। यह विकल्प मुख्य Jupyter पर्यावरण में रखे गए डिफ़ॉल्ट टेम्पलेट्स का उपयोग करता है। Jinja2 ब्लॉकिंग और टाइपसेटिंग परिभाषित करने के लिए Python के लिए एक शक्तिशाली टेम्पलेटिंग भाषा है। टेम्पलेट्स में सेक्शन होते हैं, जिन्हें टैग द्वारा परिभाषित किया जाता है, जो टेम्पलेट को बताते हैं कि इनपुट डेटा को कैसे रेंडर करना है। जब टेम्पलेट रेंडर होता है, तो डेटा वेरिएबल्स या एक्सप्रेशंस की जगह ले लेता है।

टेम्पलेट के विभिन्न सेक्शंस के लिए डिलीमिटर्स इस प्रकार हैं:

  • {% ... %} स्टेटमेंट्स के लिए
  • {{ ... }} ऐसे एक्सप्रेशंस के लिए जिन्हें टेम्पलेट आउटपुट में प्रिंट करना है
  • {# ... #} ऐसी टिप्पणियों के लिए जो टेम्पलेट आउटपुट में शामिल नहीं होतीं

Jinja टेम्पलेट के इस छोटे से उदाहरण पर नज़र डालें (सौजन्य: Jinja2 दस्तावेज़ीकरण):

<!DOCTYPE html>

<html lang="en">

<head>

    {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage </title>
    {% endblock %}
</head>

<body>

    <div id="content">{% block content %}{% endblock %}</div>
    <div id="footer">
        {% block footer %}
        &copy; Copyright 2008 by <a href="http://domain.invalid">you </a>.
        {% endblock %}
    </div>
</body>

</html>

आप ऊपर देख सकते हैं कि टेम्पलेट का अधिकांश भाग एक सामान्य HTML दस्तावेज़ जैसा दिखता है। कोड को टेम्पलेट की तरह समझने के लिए Jinja को कुछ अतिरिक्त लाइनों की आवश्यकता होती है। {% block head %} HTML दस्तावेज़ के head सेक्शन और यह टेम्पलेट अपने फॉर्मेटिंग का विस्तार कैसे करेगा, यह परिभाषित करता है। {% block title %} सेक्शन बताता है कि इनपुट शीर्षक कहाँ प्रदर्शित होगा। और {% endblock %} कई जगहों पर आता है क्योंकि यह किसी भी संबद्ध टेम्पलेट ब्लॉक का समापन करता है।

अब आप Jinja का उपयोग करके अपने खुद के कस्टम टेम्पलेट्स बनाना सीखने के लिए तैयार हैं!

Jinja का परिचय

Jinja एक टेम्पलेटिंग इंजन है जो आपको यह परिभाषित करने देता है कि आपके दस्तावेज़ कैसे प्रदर्शित होंगे। विशेष रूप से, इस ट्यूटोरियल में, आप Jinja टेम्पलेट्स की मदद से अपने Jupyter Notebook को कैसे एक्सपोर्ट करना है, इस पर ध्यान केंद्रित करेंगे।

सबसे पहले, Jinja2 से Template इम्पोर्ट करें:

from jinja2 import Template

टेम्पलेट्स के साथ बेसिक रेंडरिंग समझना

Jinja टेम्पलेट्स में डेटा रेंडर करना काफी सीधा है। ब्रेसेज़ और वेरिएबल नामों का उपयोग करके, आप टेम्पलेट में अपना डेटा दिखा सकते हैं:

myTemplate = Template("My template is {{ something }}!")
myTemplate.render(something="awesome")
'My template is awesome!'

.render(input) कॉल करने से आप अपने Notebook में टेम्पलेट प्रदर्शित कर सकते हैं, जहाँ आपका इनपुट टेम्पलेट के सामान्य {{ something }} को प्रतिस्थापित करता है। यह Jinja में expression उपयोग का एक उदाहरण है।

आप Python statement परिभाषित करके टेम्पलेट को और भी डायनेमिक ढंग से उपयोग कर सकते हैं, जिसे Jinja इंटरप्रेट करेगा।

myFancyTemplate = Template("Let's count to 10: {% for i in range(11) %}{{i}} " "{% endfor %}")
myFancyTemplate.render()
"Let's count to 10: 0 1 2 3 4 5 6 7 8 9 10 "

ध्यान दें आपने एक for लूप परिभाषित किया और टेम्पलेट ने 0 से 10 तक की संख्याएँ बीच में स्पेस के साथ रेंडर कर दीं। {% expression %} की statement सिंटैक्स कस्टम टेम्पलेट बनाने के लिए बहुत लचीलापन प्रदान करती है।

टेम्पलेट इनहेरिटेंस

डिफ़ॉल्ट Jupyter एक्सपोर्ट्स को बढ़ाने वाले टेम्पलेट्स बनाने के लिए, आप टेम्पलेट इनहेरिटेंस का उपयोग कर सकते हैं। प्रोग्रामिंग में इनहेरिटेंस वह अवधारणा है जिसमें आप किसी चाइल्ड ऑब्जेक्ट में कुछ ऐसा लागू कर सकते हैं जो पैरेंट की परिभाषित कार्यक्षमता का उपयोग कर सके। एक सरल उदाहरण यह है कि यदि आपके पास एक Dog ऑब्जेक्ट है जो bark, eat और walk कर सकता है, तो आप इनहेरिटेंस का उपयोग करके एक Dalmatian ऑब्जेक्ट बना सकते हैं जो उन सभी विशेषताओं को विरासत में ले और अन्य जोड़ सके, जैसे has spots। आप इस ट्यूटोरियल में देखेंगे कि इनहेरिटेंस टेम्पलेटिंग के लिए कितना उपयोगी है, क्योंकि आमतौर पर आउटपुट को कस्टमाइज़ करने के लिए केवल छोटे बदलावों की आवश्यकता होती है। अन्य इनहेरिटेंस भाषाओं की तरह, Jinja extends और super जैसे कीवर्ड का उपयोग पैरेंट परिभाषाओं तक पहुँचने के लिए करता है।

ऊपर दिए गए उदाहरण पैरेंट टेम्पलेट पर नज़र डालें, जिसका नाम base.html है:

<!DOCTYPE html>
<html lang="en">

<head>
    {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage </title>
    {% endblock %}
</head>

<body>
    <div id="content">{% block content %}{% endblock %}</div>
    <div id="footer">
        {% block footer %}
        &copy; Copyright 2008 by <a href="http://domain.invalid">you </a>.
        {% endblock %}
    </div>
</body>

</html>

एक चाइल्ड टेम्पलेट इस तरह दिख सकता है (Jinja2 दस्तावेज़ीकरण सौजन्य):

{% extends "base.html" %}

{% block title %}Index{% endblock %}

{% block head %}
    {{ super() }}
    <style type="text/css">
        .important { color: #336699; }
    </style>
{% endblock %}

{% block content %}
    <h1>Index</h1>
    <p class="important">
      Welcome to my awesome homepage.
    </p>
{% endblock %}

ध्यान दें कि चाइल्ड टेम्पलेट {% extends "base.html" %} से शुरू होता है। यह घोषणा Jinja टेम्पलेटिंग इंजन को बताती है कि इस दस्तावेज़ को कैसे ट्रीट करना है (यानि base.html से इनहेरिटेंस वाले HTML के रूप में)। इस चाइल्ड टेम्पलेट का उपयोग होमपेज के लिए अलग-अलग एट्रिब्यूट्स निर्दिष्ट करने की अनुमति देता है (जैसे किसी विशेष CSS रंग)। साथ ही, आप head ब्लॉक में देख सकते हैं कि चाइल्ड टेम्पलेट super() कॉल के साथ पैरेंट की स्टाइल को इनहेरिट करता है।

Jupyter Notebooks को एक्सपोर्ट करने के लिए nbconvert का उपयोग

अब जब आप टेम्पलेट्स की बेसिक सिंटैक्स और इनहेरिटेंस समझ गए हैं, तो आप nbconvert के साथ अपना Jupyter Notebook एक्सपोर्ट करना और आउटपुट को कस्टमाइज़ करने के लिए टेम्पलेट्स परिभाषित करना सीख सकते हैं।

पहले nbconvert इम्पोर्ट करें:

import nbconvert

nbconvert विभिन्न फॉर्मेट्स में आउटपुट बना सकता है। यह ट्यूटोरियल HTML और LaTeX/PDF आउटपुट पर केंद्रित होगा। नोटबुक में आउटपुट देखने के लिए, IPython की display फ़ंक्शन और nbconvert कॉल में --stdout का उपयोग करें।

example = !jupyter nbconvert --to html 'Example.ipynb' --stdout
from IPython.display import HTML, display
display(HTML('\n'.join(example)))

[NbConvertApp] Converting notebook Example.ipynb to html

converting notebook example

Notebook का यह हिस्सा मूल .ipynb फ़ाइल से काफी मिलता-जुलता दिखता है। आउटपुट एक स्टैंडअलोन दस्तावेज़ के रूप में हेडिंग्स और टेक्स्ट के साथ वैसे ही दिखता है जैसा आम तौर पर Notebook में दिखता है। कोड सेल ब्लॉक्स धूसर बॉक्स के रूप में प्रदर्शित होते हैं (जिसे "Notebook स्टाइल" कहा जाता है)। मुख्य अंतर जो आप देख सकते हैं वह यह है कि Jupyter का डिफ़ॉल्ट HTML टेम्पलेट सक्रिय Notebooks की तरह "Out:" प्रॉम्प्ट्स प्रदर्शित नहीं करता।

nbconvert और कस्टम चाइल्ड टेम्पलेट का उपयोग करके Jupyter Notebooks एक्सपोर्ट करना

आम तौर पर, आप Jupyter Notebook के डिफ़ॉल्ट एक्सपोर्ट टेम्पलेट्स का विस्तार करना चाहेंगे और अपने आउटपुट में छोटे-छोटे डिज़ाइन बदलाव करना चाहेंगे।

उदाहरण के लिए, इस सरल टेम्पलेट को देखें जो आउटपुट से Markdown सेल्स हटा देता है (जिसे rmMkdwn.tpl कहा जाता है):

{% extends 'basic.tpl'%}

{% block markdowncell -%}
{% endblock markdowncell %}

nbconvert पर टेम्पलेट लागू करना --template= विकल्प के साथ किया जाता है:

example = !jupyter nbconvert --to html 'Example.ipynb' --template='rmMkdwn.tpl' --stdout
display(HTML('\n'.join(example)))

[NbConvertApp] Converting notebook Example.ipynb to html converting notebook example 2 इतना सरल टेम्पलेट, जैसे rmMkdwn.tpl, भी आपके आउटपुट को अत्यधिक कस्टमाइज़ करने में मदद कर सकता है।

इस अधिक जटिल टेम्पलेट को देखें, जो सेल्स को लाल बॉक्स में रखता है (जिसे boxRed.tpl कहा जाता है):

{% extends 'full.tpl'%}

{% block any_cell %}
    <div style="border:thin solid red">
        {{ super() }}
    </div>
{% endblock any_cell %}
example = !jupyter nbconvert --to html 'Example.ipynb' --template='boxRed.tpl' --stdout
display(HTML('\n'.join(example)))

[NbConvertApp] Converting notebook Example.ipynb to html converting notebook example 3

ऊपर, आप देख सकते हैं कि एकमात्र स्टाइल परिवर्तन प्रत्येक सेल के चारों ओर लाल बॉक्स हैं। super() का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि प्रत्येक सेल अपने पैरेंट टेम्पलेट full.tpl से अपनी व्यक्तिगत स्टाइलिंग बनाए रखे।

LaTeX और PDF में एक्सपोर्ट के लिए टेम्पलेट्स में अंतर

क्योंकि LaTeX में { } और % विशेष कैरेक्टर्स हैं, आपको (( )) और * का उपयोग करना होता है। साथ ही, डिफ़ॉल्ट LaTeX टेम्पलेट्स base.tplx, article.tplx, और report.tplx हैं, जो LaTeX दस्तावेज़ वर्गों से मेल खाते हैं।

LaTeX चाइल्ड टेम्पलेट के साथ Markdown सेल्स हटाने पर नज़र डालें:

((* extends 'article.tplx' *))

((* block markdowncell -*))
((* endblock markdowncell *))

nbconvert LaTeX या PDF आउटपुट बना सकता है—PDF आउटपुट LaTeX टेम्पलेट्स से संकलित होता है। इस ट्यूटोरियल में देखने में आसानी के लिए, देखें कि जब आप rmMkdwn.tplx का उपयोग करके PDF में एक्सपोर्ट करते हैं तो क्या होता है।

!jupyter nbconvert --to pdf 'Example.ipynb' --template='rmMkdwn.tplx'
from IPython.display import IFrame
IFrame('Example.pdf', width=800, height=500)
[NbConvertApp] Converting notebook Example.ipynb to pdf
[NbConvertApp] Support files will be in Example_files/
[NbConvertApp] Making directory Example_files
[NbConvertApp] Writing 16047 bytes to notebook.tex
[NbConvertApp] Building PDF
[NbConvertApp] Running xelatex 3 times: ['xelatex', 'notebook.tex']
[NbConvertApp] Running bibtex 1 time: ['bibtex', 'notebook']
[NbConvertApp] WARNING | bibtex had problems, most likely because there were no citations
[NbConvertApp] PDF successfully created
[NbConvertApp] Writing 16102 bytes to Example.pdf

pdf output

ध्यान दें, यह आउटपुट HTML संस्करण से काफी अलग निकला। LaTeX पहली Markdown सेल को लेख के शीर्षक में फीड करता है, इसलिए यह आउटपुट में अभी भी दिखाई देता है। टेम्पलेट ने उपशीर्षक को सही तरीके से हटा दिया (अर्थात उसने उस Markdown सेल को वास्तविक Markdown माना)। लेख का डॉक्यूमेंट क्लास आज की तारीख से अपडेट होता है—जो मूल Notebook में नहीं था। फ़ॉन्ट और स्पेसिंग HTML संस्करण से अलग हैं। अंत में, डिफ़ॉल्ट रूप से आउटपुट क्लासिक IPython डिस्प्ले का उपयोग करता है, न कि "Notebook स्टाइल" डिस्प्ले का।

यदि आप Jupyter में मौजूद किसी LaTeX दस्तावेज़ वर्ग का विस्तार चुनते हैं, तो सुनिश्चित करें कि आप समझते हैं कि वह कौन-सा फॉर्मेटिंग उपयोग करेगा।

निष्कर्ष

टेम्पलेट्स, Jinja2 और nbconvert के बारे में कुछ प्रमुख बातें याद रखने योग्य हैं।

टेम्पलेट्स यह परिभाषित करते हैं कि किसी दस्तावेज़ को वेबपेज या किसी अन्य आउटपुट फॉर्मेट में कैसे प्रदर्शित किया जाएगा। Jupyter Notebooks अलग-अलग एक्सपोर्ट फॉर्मेट प्रदर्शित करने के लिए Jinja टेम्पलेट्स लागू करते हैं। टेम्पलेट्स में इनहेरिटेंस नियम होते हैं जो आपको समान पृष्ठों के लिए पैरेंट और चाइल्ड टेम्पलेट्स परिभाषित करने की अनुमति देते हैं, जिनमें थोड़ा-बहुत फॉर्मेटिंग अंतर हो।

Jinja टेम्पलेट्स में statements, expressions, और (वैकल्पिक रूप से) comments होते हैं। {% statement %} द्वारा परिभाषित Statements टेम्पलेट की संरचना निर्धारित करते हैं। {{ expression }} द्वारा परिभाषित Expressions आपके डेटा से टेम्पलेट को भरते हैं। और {# comment #} द्वारा परिभाषित comments आउटपुट में प्रदर्शित नहीं होते—वे केवल टेम्पलेट के आंतरिक नोट्स होते हैं।

nbconvert एक Python लाइब्रेरी है जो आपके Jupyter Notebook को अन्य फॉर्मेट्स, जैसे HTML, LaTeX और PDF में बदलने देती है। nbconvert इन फॉर्मेट्स में Jupyter Notebooks कैसे प्रदर्शित होंगे, यह परिभाषित करने के लिए Jinja टेम्पलेट्स का उपयोग करता है। आप कस्टम टेम्पलेट्स परिभाषित कर सकते हैं या इनहेरिटेंस का उपयोग करके डिफ़ॉल्ट Jupyter टेम्पलेट्स का विस्तार कर सकते हैं।

अब आप अपने खुद के टेम्पलेट्स बनाना और सुंदर Jupyter Notebook दस्तावेज़ एक्सपोर्ट करना शुरू करने के लिए तैयार हैं!

संदर्भ:

Jinja2 दस्तावेज़ीकरण

Python टेम्पलेटिंग दस्तावेज़ीकरण

nbconvert दस्तावेज़ीकरण

विषय
डेटा साइंस
Python

Python के बारे में और जानें

कोर्स

Python में Functions लिखना

4 घंटा
113.9K
अच्छे दस्तावेज़ीकरण के साथ रखरखाव योग्य, पुन: प्रयोज्य, जटिल फ़ंक्शन लिखने के लिए अभ्यास का उपयोग करना सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

कोर्स

Python में Data Science परिचय

4 घंटा
503.1K
Python से डेटा विज्ञान में उतरें और अपने डेटा का प्रभावी विश्लेषण व विज़ुअलाइज़ेशन करना सीखें। कोई कोडिंग अनुभव या कौशल की आवश्यकता नहीं।
और देखेंRight Arrow