CherryPy তে Templates এবং Views হল ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যেখানে আপনি ডাইনামিক কনটেন্ট এবং HTML পেজ রেন্ডার করতে পারেন। CherryPy ডিফল্টভাবে টেমপ্লেটিং সিস্টেম সরবরাহ না করলেও, আপনি অন্য টেমপ্লেট ইঞ্জিন যেমন Jinja2, Mako, CherryPy's own Template Tool, বা অন্য যেকোনো টেমপ্লেট ইঞ্জিন ব্যবহার করতে পারেন।
এখানে আমরা CherryPy তে টেমপ্লেটিং এবং ভিউ রেন্ডার করার প্রক্রিয়া সম্পর্কে আলোচনা করব।
CherryPy তে Templates এবং Views
CherryPy তে Views এবং Templates ব্যবহারের মাধ্যমে আপনি ডাইনামিক HTML পেজ তৈরি করতে পারেন। এটি ইউজার ইন্টারফেস (UI) তৈরি করতে সহায়ক, যেখানে আপনি ডাইনামিক ডেটা ব্যবহার করে HTML ফাইল রেন্ডার করেন।
CherryPy এবং Jinja2 ব্যবহার করে টেমপ্লেট রেন্ডার করা
Jinja2 হল একটি জনপ্রিয় এবং শক্তিশালী টেমপ্লেট ইঞ্জিন, যা CherryPy-তে ব্যবহার করা যেতে পারে।
১. Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে CherryPy অ্যাপ তৈরি করা
ধাপ ১: Jinja2 ইনস্টল করা
প্রথমে আপনাকে Jinja2 ইনস্টল করতে হবে। এটি পাইথনের প্যাকেজ ম্যানেজার pip ব্যবহার করে ইনস্টল করা যায়:
pip install jinja2
ধাপ ২: CherryPy এবং Jinja2 এর মাধ্যমে টেমপ্লেট রেন্ডার করা
এখন একটি CherryPy অ্যাপ তৈরি করে জিনজা2 টেমপ্লেট ব্যবহার করা যাক।
প্রথম CherryPy অ্যাপ:
import cherrypy
from jinja2 import Environment, FileSystemLoader
class MyApp:
def __init__(self):
self.env = Environment(loader=FileSystemLoader("templates"))
@cherrypy.expose
def index(self):
template = self.env.get_template("index.html")
return template.render(name="CherryPy")
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
- Jinja2 Environment সেটআপ করা হয়েছে, যেখানে
FileSystemLoaderব্যবহার করে templates ফোল্ডার থেকে টেমপ্লেট লোড করা হয়। indexমেথডেrenderব্যবহার করে ডাইনামিক কনটেন্ট প্রদান করা হয়েছে।
ধাপ ৩: টেমপ্লেট ফাইল তৈরি করা
templates নামে একটি ফোল্ডার তৈরি করুন এবং তার মধ্যে একটি index.html ফাইল তৈরি করুন।
templates/index.html:
<!DOCTYPE html>
<html>
<head>
<title>CherryPy টেমপ্লেট উদাহরণ</title>
</head>
<body>
<h1>স্বাগতম, {{ name }}!</h1>
</body>
</html>
এখানে {{ name }} একটি প্লেসহোল্ডার, যা CherryPy অ্যাপ থেকে পাঠানো ডাইনামিক ভ্যালু দ্বারা পূর্ণ হবে।
২. CherryPy এর ইন-বিল্ট টেমপ্লেটিং টুলস ব্যবহার করা
CherryPy নিজে একটি টেমপ্লেটিং টুলস সরবরাহ করে, যা টেমপ্লেট রেন্ডার করার জন্য সরাসরি ব্যবহার করা যেতে পারে। তবে এটি কিছুটা সীমিত, তাই বড় প্রজেক্টে সাধারণত Jinja2 বা Mako ব্যবহার করা হয়।
CherryPy Template Tool উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return cherrypy.template("index.html", name="CherryPy")
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে cherrypy.template ব্যবহার করা হয়েছে, যা টেমপ্লেট রেন্ডারিংয়ের জন্য CherryPy এর নিজস্ব টুল।
টেমপ্লেট ফাইল:
templates/index.html:
<!DOCTYPE html>
<html>
<head>
<title>CherryPy টেমপ্লেট উদাহরণ</title>
</head>
<body>
<h1>স্বাগতম, {{ name }}!</h1>
</body>
</html>
৩. টেমপ্লেট রেন্ডারিং এবং ভিউ কনফিগারেশন
CherryPy তে টেমপ্লেটিং এবং ভিউ কনফিগারেশন সহজেই সেট করা যায়। আপনি views ফোল্ডার ব্যবহার করে টেমপ্লেটগুলোর সঠিক লোকেশন উল্লেখ করতে পারেন।
উদাহরণ: টেমপ্লেট কনফিগারেশন
import cherrypy
from jinja2 import Environment, FileSystemLoader
class MyApp:
def __init__(self):
self.env = Environment(loader=FileSystemLoader("views"))
@cherrypy.expose
def index(self):
template = self.env.get_template("index.html")
return template.render(name="CherryPy")
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, views ফোল্ডার ব্যবহার করা হয়েছে, যাতে টেমপ্লেটগুলো সঠিকভাবে লোড হতে পারে।
৪. স্ট্যাটিক ফাইল (CSS/JS) পরিবেশন করা
আপনি টেমপ্লেটের মাধ্যমে স্ট্যাটিক ফাইল যেমন CSS বা JavaScript ফাইলও ব্যবহার করতে পারেন।
উদাহরণ:
app.conf কনফিগারেশন ফাইল:
[/static]
tools.staticdir.on = True
tools.staticdir.dir = "./static"
এখন /static পাথ দিয়ে CSS, JS, এবং ইমেজ ফাইল সার্ভ করা যাবে।
CherryPy তে Templates এবং Views ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনের UI সহজেই কাস্টমাইজ এবং ডাইনামিকভাবে রেন্ডার করতে পারবেন। Jinja2 এবং CherryPy’s own template tool ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের জন্য কার্যকরী টেমপ্লেট সিস্টেম তৈরি করতে পারেন। CherryPy তে টেমপ্লেট ব্যবহার করা ওয়েব ডেভেলপমেন্টকে আরও বেশি ডাইনামিক এবং আকর্ষণীয় করে তোলে।
CherryPy নিজে একটি টেমপ্লেট ইঞ্জিন সরবরাহ না করলেও, এটি সহজে অন্যান্য পাইথন টেমপ্লেট ইঞ্জিনের সাথে ইন্টিগ্রেট করা যেতে পারে। জনপ্রিয় টেমপ্লেট ইঞ্জিনগুলোর মধ্যে Jinja2, Mako, এবং Tornado Templates অন্যতম। এই টেমপ্লেট ইঞ্জিনগুলো CherryPy এর সাথে ব্যবহৃত হতে পারে, যাতে আপনি ডাইনামিক HTML পেজ তৈরি করতে পারেন।
CherryPy এবং টেমপ্লেট ইঞ্জিনের সংযোগ
CherryPy সাধারণত cherrypy.tools এবং cherrypy.response ব্যবহার করে HTML পেজ রেন্ডার করতে সক্ষম। টেমপ্লেট ইঞ্জিনের সাথে সংযোগ করার জন্য আপনাকে tools ব্যবহার করতে হবে, যা টেমপ্লেট রেন্ডারিংয়ের জন্য প্রয়োজনীয়। এখানে Jinja2 টেমপ্লেট ইঞ্জিনের উদাহরণ ব্যবহার করা হয়েছে।
Jinja2 টেমপ্লেট ইঞ্জিন সেটআপ
Jinja2 হলো একটি জনপ্রিয় Python টেমপ্লেট ইঞ্জিন যা HTML পেজে ডাইনামিক কন্টেন্ট ইনজেক্ট করতে ব্যবহৃত হয়। CherryPy এর সাথে এটি সহজে ইন্টিগ্রেট করা যায়।
১. Jinja2 ইনস্টলেশন
প্রথমে Jinja2 টেমপ্লেট ইঞ্জিন ইনস্টল করতে হবে:
pip install jinja2
Jinja2 Integration Example
উদাহরণ: CherryPy এবং Jinja2 টেমপ্লেট ইঞ্জিনের সাথে একটি অ্যাপ তৈরি করা
import cherrypy
from jinja2 import Environment, FileSystemLoader
import os
class MyApp:
@cherrypy.expose
def index(self):
return self.render_template('index.html', name="Rahul")
def render_template(self, template_name, **kwargs):
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
env = Environment(loader=FileSystemLoader(template_dir))
template = env.get_template(template_name)
return template.render(**kwargs)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
render_templateমেথডেJinja2টেমপ্লেট ইঞ্জিনের সাথে CherryPy সংযুক্ত করা হয়েছে।template_nameএর মাধ্যমে টেমপ্লেট ফাইলের নাম (যেমন:index.html) পাস করা হয়।kwargsদিয়ে ডাইনামিক ডেটা পাস করা হয় (এখানেname="Rahul"পাস করা হয়েছে)।
টেমপ্লেট ফাইল (templates/index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CherryPy and Jinja2 Example</title>
</head>
<body>
<h1>স্বাগতম, {{ name }}!</h1>
<p>এই পেজটি CherryPy এবং Jinja2 দ্বারা রেন্ডার করা হয়েছে।</p>
</body>
</html>
আরও টেমপ্লেট ইঞ্জিন ইন্টিগ্রেশন
CherryPy তে আপনি Mako, Tornado, এবং অন্যান্য টেমপ্লেট ইঞ্জিনও ব্যবহার করতে পারেন। এগুলোর সাথে ইন্টিগ্রেশন করতে সাধারণত tools ব্যবহার করা হয়।
উদাহরণ: Mako Integration
Mako টেমপ্লেট ইঞ্জিনও CherryPy এর সাথে খুব সহজে ইন্টিগ্রেট করা যায়। প্রথমে Mako ইনস্টল করতে হবে:
pip install mako
এটি ব্যবহার করতে নিচের মতো কোড লিখতে হবে:
import cherrypy
from mako.template import Template
from mako.lookup import TemplateLookup
class MyApp:
@cherrypy.expose
def index(self):
return self.render_template("index.html", name="Rahul")
def render_template(self, template_name, **kwargs):
lookup = TemplateLookup(directories=['./templates'])
template = lookup.get_template(template_name)
return template.render(**kwargs)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
TemplateLookupব্যবহার করে টেমপ্লেট ফাইলের লোকেশন নির্ধারণ করা হয়।render_templateমেথডে ডাইনামিক কনটেন্ট রেন্ডার করা হয়।
CherryPy নিজে কোনো টেমপ্লেট ইঞ্জিন সরবরাহ না করলেও, এটি সহজে অন্য টেমপ্লেট ইঞ্জিন যেমন Jinja2, Mako বা Tornado Templates এর সাথে ইন্টিগ্রেট করা যায়। টেমপ্লেট ইঞ্জিন ব্যবহারের মাধ্যমে আপনি ডাইনামিক এবং ইউজার ফ্রেন্ডলি ওয়েব পেজ তৈরি করতে পারবেন, যা CherryPy অ্যাপ্লিকেশনগুলিকে আরও শক্তিশালী এবং ইন্টারঅ্যাকটিভ করে তোলে।
CherryPy একটি লাইটওয়েট ওয়েব ফ্রেমওয়ার্ক, যা দিয়ে আপনি সহজে HTML রেসপন্স দিতে পারেন এবং টেমপ্লেট ব্যবহার করে ডায়নামিক HTML তৈরি করতে পারেন। CherryPy এর সাথে টেমপ্লেট ইঞ্জিন যেমন Jinja2 ব্যবহার করে আপনি ডায়নামিক কনটেন্ট রেন্ডার করতে পারেন। এই টিউটোরিয়ালে আমরা সাধারণ HTML রেসপন্স এবং টেমপ্লেটিং এর মাধ্যমে ডায়নামিক HTML রেন্ডার করার পদ্ধতি দেখব।
Simple HTML Response
CherryPy দিয়ে সরাসরি HTML রেসপন্স দেওয়া খুবই সহজ। আপনি return স্টেটমেন্টে সরাসরি HTML কোড দিয়ে রেসপন্স পাঠাতে পারেন।
উদাহরণ: সরাসরি HTML রেসপন্স
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return """<html>
<head><title>CherryPy Example</title></head>
<body>
<h1>স্বাগতম CherryPy অ্যাপে!</h1>
<p>এটি একটি সহজ HTML রেসপন্স উদাহরণ।</p>
</body>
</html>"""
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে index মেথড HTML কোড সরাসরি রিটার্ন করছে যা ওয়েব পেজে প্রদর্শিত হবে।
ব্রাউজারে পরীক্ষা:
- ব্রাউজারে
http://127.0.0.1:8080এ গিয়ে "স্বাগতম CherryPy অ্যাপে!" লেখা দেখতে পাবেন।
Templating with Jinja2
CherryPy এর সাথে Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে ডায়নামিক HTML তৈরি করা যায়। Jinja2 আপনাকে Python ডাটা থেকে HTML টেমপ্লেট তৈরি করতে সাহায্য করে, যা ওয়েব পেজে রেন্ডার করা হয়।
Jinja2 ইনস্টলেশন
প্রথমে Jinja2 ইন্সটল করতে হবে:
pip install jinja2
Jinja2 ব্যবহার করে Templating
CherryPy তে Jinja2 ব্যবহার করতে আপনি jinja2 মডিউল এবং CherryPy এর render ফিচার ব্যবহার করবেন।
উদাহরণ: Jinja2 দিয়ে HTML টেমপ্লেট
প্রজেক্ট কাঠামো:
project/ ├── app.py ├── templates/ │ └── index.html └── static/ └── styles.cssindex.htmlটেমপ্লেট (templates/index.html):<html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="/static/styles.css"> </head> <body> <h1>{{ message }}</h1> <p>{{ description }}</p> </body> </html>Python কোড (
app.py):import cherrypy from jinja2 import Environment, FileSystemLoader class MyApp: def __init__(self): # Jinja2 টেমপ্লেট লোডার সেট আপ self.env = Environment(loader=FileSystemLoader('templates')) @cherrypy.expose def index(self): # টেমপ্লেট লোড করা template = self.env.get_template('index.html') # ডাটা দিয়ে টেমপ্লেট রেন্ডার করা return template.render(title="CherryPy Jinja2 Example", message="স্বাগতম CherryPy অ্যাপে!", description="এটি Jinja2 দিয়ে রেন্ডার করা একটি ডায়নামিক HTML।") if __name__ == '__main__': cherrypy.quickstart(MyApp())
এখানে, Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করা হয়েছে:
index.htmlটেমপ্লেট ফাইলটি টাইটেল, মেসেজ, এবং ডেসক্রিপশন দেখানোর জন্য প্রস্তুত।- Python কোডে টেমপ্লেট লোড করা হয়েছে এবং ডায়নামিক ডাটা পাঠানো হয়েছে যেমন title, message, এবং description।
ব্রাউজারে পরীক্ষা:
- ব্রাউজারে
http://127.0.0.1:8080এ গিয়ে আপনার ডায়নামিক HTML দেখতে পাবেন।
Static File Serve with Jinja2
CherryPy তে স্ট্যাটিক ফাইল যেমন CSS বা JS ফাইল সরবরাহ করা যেতে পারে। আপনাকে tools.staticdir.on কনফিগারেশন ব্যবহার করতে হবে।
উদাহরণ: Static File Serve
CSS ফাইল (static/styles.css):
body { font-family: Arial, sans-serif; } h1 { color: #007BFF; }Python কোড (
app.py):import cherrypy from jinja2 import Environment, FileSystemLoader class MyApp: def __init__(self): self.env = Environment(loader=FileSystemLoader('templates')) @cherrypy.expose def index(self): template = self.env.get_template('index.html') return template.render(title="CherryPy Jinja2 Example", message="স্বাগতম CherryPy অ্যাপে!", description="এটি Jinja2 দিয়ে রেন্ডার করা একটি ডায়নামিক HTML।") # কনফিগারেশন: স্ট্যাটিক ফাইল পরিবেশন করা config = { '/static': { 'tools.staticdir.on': True, 'tools.staticdir.dir': './static' } } if __name__ == '__main__': cherrypy.quickstart(MyApp(), '/', config)
এখানে স্ট্যাটিক ফাইল সার্ভ করার জন্য tools.staticdir.on কনফিগারেশন ব্যবহার করা হয়েছে। styles.css ফাইলটি /static/styles.css পাথে অ্যাক্সেস করা যাবে।
ব্রাউজারে পরীক্ষা:
- ব্রাউজারে
http://127.0.0.1:8080এবংhttp://127.0.0.1:8080/static/styles.cssগিয়ে স্টাইলিং এবং টেমপ্লেটের ডায়নামিক কনটেন্ট দেখতে পারবেন।
CherryPy দিয়ে HTML রেসপন্স এবং Jinja2 টেমপ্লেট ব্যবহারের মাধ্যমে ডায়নামিক ওয়েব পেজ তৈরি করা সহজ। Jinja2 টেমপ্লেট ইঞ্জিন আপনাকে Python ডাটা থেকে HTML তৈরি করতে সাহায্য করে এবং CherryPy এর স্ট্যাটিক ফাইল সার্ভিং এর মাধ্যমে আপনি স্টাইলিং, স্ক্রিপ্টিং এবং অন্যান্য ফাইল পরিবেশন করতে পারেন।
CherryPy এবং Jinja2 একত্রে ব্যবহার করা অনেক জনপ্রিয়, কারণ CherryPy ওয়েব ফ্রেমওয়ার্কের মধ্যে Jinja2 টেমপ্লেট ইঞ্জিনকে ইন্টিগ্রেট করা সহজ এবং কার্যকরী। Jinja2 একটি শক্তিশালী টেমপ্লেট ইঞ্জিন যা HTML পেজে ডাইনামিক ডেটা রেন্ডার করতে ব্যবহৃত হয়। CherryPy এবং Jinja2 এর ইন্টিগ্রেশন আপনাকে ওয়েব অ্যাপ্লিকেশনে ডাইনামিক কন্টেন্ট এবং লজিক যুক্ত করতে সহায়তা করবে।
Jinja2 কি?
Jinja2 একটি পপুলার পাইথন ভিত্তিক টেমপ্লেট ইঞ্জিন যা HTML, XML, বা অন্যান্য মার্কআপ ভাষার জন্য ব্যবহৃত হয়। এটি টেমপ্লেট ফাইলের মধ্যে ডাইনামিক কন্টেন্ট রেন্ডার করতে সহায়তা করে, যেমন প্যারামিটার, লুপ, কন্ডিশনাল স্টেটমেন্ট ইত্যাদি।
CherryPy এবং Jinja2 এর ইন্টিগ্রেশন
CherryPy এর সাথে Jinja2 ইন্টিগ্রেট করতে আপনাকে কয়েকটি ধাপ অনুসরণ করতে হবে। প্রথমে আপনাকে Jinja2 টেমপ্লেট ইঞ্জিন ইনস্টল করতে হবে, তারপর CherryPy এ সেটআপ করতে হবে। চলুন ধাপে ধাপে এটি দেখি:
ধাপ ১: Jinja2 ইনস্টলেশন
আপনি যদি Jinja2 আপনার সিস্টেমে ইনস্টল না করে থাকেন, তবে এটি পিপ (pip) এর মাধ্যমে ইনস্টল করতে পারেন:
pip install Jinja2
ধাপ ২: CherryPy ও Jinja2 ইন্টিগ্রেশন
CherryPy তে Jinja2 ব্যবহার করার জন্য প্রথমে আপনি Jinja2 টেমপ্লেট লোড করতে একটি কাস্টম টুল তৈরি করবেন এবং তারপর CherryPy অ্যাপ্লিকেশনের রেসপন্সে টেমপ্লেট রেন্ডার করবেন।
উদাহরণ: CherryPy এবং Jinja2 ইন্টিগ্রেশন
import cherrypy
from jinja2 import Environment, FileSystemLoader
class MyApp:
def __init__(self):
# Jinja2 টেমপ্লেট লোডার সেটআপ
self.jinja_env = Environment(loader=FileSystemLoader('templates'))
def render_template(self, template_name, **kwargs):
# টেমপ্লেট রেন্ডারিং ফাংশন
template = self.jinja_env.get_template(template_name)
return template.render(**kwargs)
@cherrypy.expose
def index(self):
# ডাইনামিক ডেটা এবং টেমপ্লেট রেন্ডারিং
return self.render_template('index.html', title='স্বাগতম', message='CherryPy এবং Jinja2 এর সাথে ইন্টিগ্রেশন')
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
self.jinja_env = Environment(loader=FileSystemLoader('templates')): Jinja2 এর Environment সেটআপ করা হয় এবং টেমপ্লেট ফাইলগুলো templates ফোল্ডারে রাখার জন্য ফাইল সিস্টেম লোডার ব্যবহার করা হয়।render_template: এটি Jinja2 টেমপ্লেট রেন্ডার করতে ব্যবহৃত একটি কাস্টম ফাংশন, যা টেমপ্লেট নাম এবং ডাইনামিক ডেটা নেয়।index: এটি CherryPy এর index রুট, যেখানে index.html টেমপ্লেট রেন্ডার করা হয়।
ধাপ ৩: টেমপ্লেট ফাইল তৈরি করা
templates/index.html নামে একটি HTML টেমপ্লেট তৈরি করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
এখানে:
{{ title }}এবং{{ message }}হল Jinja2 এর টেমপ্লেট ভেরিয়েবল, যা CherryPy অ্যাপ্লিকেশন থেকে ডাইনামিকভাবে পাস করা হবে।
ধাপ ৪: CherryPy সার্ভার চালানো
উপরের কোডটি সেভ করার পর টার্মিনালে বা কমান্ড প্রম্পটে এটি চালান:
python app.py
এখন ব্রাউজারে http://127.0.0.1:8080/ গিয়ে দেখতে পাবেন:
স্বাগতম
CherryPy এবং Jinja2 এর সাথে ইন্টিগ্রেশন
ধাপ ৫: আরও টেমপ্লেট ফিচার ব্যবহার করা
Jinja2 তে আরও উন্নত টেমপ্লেট ফিচার রয়েছে, যেমন:
- ফ্লো কন্ট্রোল (Flow control): if-else, for লুপ, filters, macros ইত্যাদি।
- ফিল্টার ব্যবহার: ডেটা প্রসেসিং, যেমন uppercase, date formatting, default values ইত্যাদি।
উদাহরণ: ফিল্টার ব্যবহারের জন্য
# index.html এ filter প্রয়োগ
<h1>{{ message|upper }}</h1>
এটি message ভেরিয়েবলটির মানকে uppercase করবে।
CherryPy এবং Jinja2 এর ইন্টিগ্রেশন আপনাকে একটি শক্তিশালী এবং ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে। CherryPy সার্ভার থেকে ডেটা পাস করে Jinja2 টেমপ্লেটের মাধ্যমে HTML পেজ রেন্ডার করা সহজ এবং খুবই কার্যকরী। CherryPy ও Jinja2 একসাথে ব্যবহার করে আপনি ডাইনামিক কন্টেন্ট সহ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যা আরও সাশ্রয়ী এবং সংগঠিত হবে।
CherryPy দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরি করার সময়, অনেক সময় অ্যাপ্লিকেশনের বিভিন্ন অংশের জন্য লেআউট (Layouts) এবং পার্টিয়াল (Partials) ব্যবহার করা হয়। Layouts সাধারণত একটি সিঙ্গেল টেমপ্লেট যা পুরো পেজের কাঠামো বা আউটলেট থাকে, এবং Partials হলো টেমপ্লেটের ছোট অংশ, যা প্রয়োজন অনুযায়ী একাধিক স্থানে ব্যবহার করা হয়। এই ধারণাগুলি মডুলার কোড লেখার জন্য খুবই উপকারী।
Layouts এবং Partials কি?
- Layouts: Layout হলো একটি টেমপ্লেট যেখানে সাধারণত পুরো পেজের কাঠামো থাকে, যেমন: হেডার, ফুটার, সাইডবার ইত্যাদি। একাধিক পেজের জন্য একই Layout ব্যবহার করা যায়, যা কোডের পুনরাবৃত্তি কমায়।
- Partials: Partials হলো ছোট ছোট টেমপ্লেট অংশ যা কোনো নির্দিষ্ট অংশকে রিপ্রেজেন্ট করে, যেমন: একটি ফর্ম, একটি টেবিল বা একটি নিবন্ধ। এগুলো একাধিক পেজে ব্যবহৃত হতে পারে এবং এটি কোড পুনর্ব্যবহারযোগ্যতার জন্য উপকারী।
CherryPy তে Layouts এবং Partials ব্যবহার
CherryPy তে টেমপ্লেট রেন্ডারিং সাধারণত Jinja2 বা Mako টেমপ্লেট ইঞ্জিন ব্যবহার করে করা হয়। CherryPy নিজে টেমপ্লেট ইঞ্জিন প্রোভাইড করে না, তবে এটি বেশ সহজে বিভিন্ন টেমপ্লেট ইঞ্জিনের সাথে একত্রে কাজ করতে পারে।
আমরা এখানে Jinja2 ব্যবহার করব, কারণ এটি জনপ্রিয় এবং সরল। CherryPy তে Jinja2 ব্যবহার করতে প্রথমে jinja2 প্যাকেজ ইনস্টল করতে হবে।
Jinja2 ইনস্টলেশন
pip install jinja2
Layouts এবং Partials এর উদাহরণ
CherryPy অ্যাপ তৈরি করা
ধরা যাক, আমাদের একটি CherryPy অ্যাপ তৈরি করতে হবে, যেখানে আমরা Layout এবং Partial টেমপ্লেট ব্যবহারের মাধ্যমে ওয়েব পেজ সাজাবো।
- Directory Structure:
project/
│
├── app.py
├── templates/
│ ├── base.html # Layout Template
│ ├── header.html # Partial Template (Header)
│ ├── footer.html # Partial Template (Footer)
│ └── index.html # Content Template
└── static/
└── styles.css
- app.py (CherryPy অ্যাপ)
import cherrypy
from jinja2 import Environment, FileSystemLoader
import os
class MyApp:
def __init__(self):
self.jinja_env = Environment(loader=FileSystemLoader('templates'))
def render_template(self, template_name, **kwargs):
template = self.jinja_env.get_template(template_name)
return template.render(**kwargs)
@cherrypy.expose
def index(self):
# Render index page with layout and partials
return self.render_template('index.html', title="Home Page")
@cherrypy.expose
def about(self):
# Render about page with layout and partials
return self.render_template('index.html', title="About Page")
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
- base.html (Layout Template)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/styles.css">
</head>
<body>
{% include 'header.html' %} <!-- Include Header Partial -->
<div class="content">
{% block content %}{% endblock %}
</div>
{% include 'footer.html' %} <!-- Include Footer Partial -->
</body>
</html>
- header.html (Partial Template)
<header>
<h1>Welcome to My Website</h1>
<nav>
<a href="/">Home</a> |
<a href="/about">About</a>
</nav>
</header>
- footer.html (Partial Template)
<footer>
<p>© 2024 My Website</p>
</footer>
- index.html (Content Template)
{% extends 'base.html' %}
{% block content %}
<h2>{{ title }}</h2>
<p>This is the main content of the {{ title }} page.</p>
{% endblock %}
Explanation
base.html: এটি Layout Template যা পেজের সাধারণ কাঠামো, হেডার এবং ফুটার ধারণ করে।header.htmlএবংfooter.html: এই দুটি ফাইল হলো Partial Templates, যেগুলিbase.htmlএincludeস্টেটমেন্ট দিয়ে অন্তর্ভুক্ত করা হয়েছে।index.html: এটি একটি কনটেন্ট টেমপ্লেট, যাbase.htmlথেকে inherit করে এবং সেখানে নির্দিষ্ট content block যোগ করা হয়।
Static ফাইল সাপোর্ট
CherryPy এর জন্য স্ট্যাটিক ফাইল সার্ভ করার কনফিগারেশন:
class MyApp:
@cherrypy.expose
def index(self):
return self.render_template('index.html', title="Home Page")
@cherrypy.expose
def about(self):
return self.render_template('index.html', title="About Page")
if __name__ == '__main__':
conf = {
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(os.getcwd(), 'static')
}
}
cherrypy.quickstart(MyApp(), '/', conf)
Result
http://localhost:8080/এ গেলে,index.htmlরেন্ডার হবে, যাbase.htmlলেআউট থেকে হেডার ও ফুটার অন্তর্ভুক্ত করবে।http://localhost:8080/aboutএ গেলে,index.htmlআবারও রেন্ডার হবে, কিন্তু শিরোনাম হবে "About Page"।
CherryPy তে Layouts এবং Partials ব্যবহারের মাধ্যমে ওয়েব অ্যাপ্লিকেশনকে আরো মডুলার এবং রিইউজেবল করা যায়। Layouts টেমপ্লেটের কাঠামো এবং Partials ছোট ছোট অংশ হিসেবে কাজ করে, যেগুলি একাধিক পেজে ব্যবহৃত হতে পারে। CherryPy এবং Jinja2 এর সাহায্যে আপনি সহজেই এই ধারণাগুলি প্রয়োগ করতে পারেন এবং কোডের পুনর্ব্যবহারযোগ্যতা বাড়াতে পারেন।
Read more