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