জিনজা২ ব্যবহার করে ফ্লাস্ক টেমপ্লেট ইনহেরিটেন্সের একটি বিস্তৃত গাইড, যাতে বেস টেমপ্লেট, ব্লক ডেফিনিশন এবং দক্ষ ওয়েব ডেভেলপমেন্টের জন্য বাস্তব উদাহরণ অন্তর্ভুক্ত রয়েছে।
ফ্লাস্ক টেমপ্লেট ইনহেরিটেন্স: জিনজা২ টেমপ্লেট অর্গানাইজেশন আয়ত্ত করুন
ওয়েব ডেভেলপমেন্টে, একাধিক পৃষ্ঠায় একটি সামঞ্জস্যপূর্ণ চেহারা বজায় রাখা অত্যন্ত গুরুত্বপূর্ণ। ফ্লাস্ক, একটি জনপ্রিয় পাইথন ওয়েব ফ্রেমওয়ার্ক, টেমপ্লেট ইনহেরিটেন্সের মাধ্যমে এটি সহজতর করার জন্য জিনজা২-এর ক্ষমতা ব্যবহার করে, যা একটি নমনীয় এবং দ্রুত টেমপ্লেট ইঞ্জিন। টেমপ্লেট ইনহেরিটেন্স আপনাকে সাধারণ উপাদানগুলির সাথে একটি বেস টেমপ্লেট সংজ্ঞায়িত করতে এবং তারপরে অন্যান্য টেমপ্লেটগুলিতে এটি প্রসারিত করতে দেয়, যা কোড পুনরায় ব্যবহারযোগ্যতাকে প্রচার করে এবং রক্ষণাবেক্ষণকে সহজ করে। এই নিবন্ধটি জিনজা২ সহ ফ্লাস্ক টেমপ্লেট ইনহেরিটেন্সের একটি বিস্তৃত গাইড প্রদান করে, যা এর নীতি, বাস্তবায়ন এবং সেরা অনুশীলনগুলি অন্তর্ভুক্ত করে।
টেমপ্লেট ইনহেরিটেন্স কী?
টেমপ্লেট ইনহেরিটেন্স একটি ডিজাইন প্যাটার্ন যা আপনাকে আপনার ওয়েবসাইটের মূল কাঠামো এবং লেআউট ধারণকারী একটি বেস টেমপ্লেট তৈরি করতে সক্ষম করে। চাইল্ড টেমপ্লেটগুলি তখন এই বেস টেমপ্লেটটি উত্তরাধিকার সূত্রে পেতে পারে এবং তাদের সামগ্রী কাস্টমাইজ করতে নির্দিষ্ট বিভাগ বা 'ব্লক' ওভাররাইড করতে পারে। এই পদ্ধতি কোড ডুপ্লিকেশন হ্রাস করে, ধারাবাহিকতা নিশ্চিত করে এবং আপনার ওয়েব অ্যাপ্লিকেশন জুড়ে আপডেটগুলি সহজ করে।
বিষয়টি একটি বাড়ির ব্লুপ্রিন্টের মতো চিন্তা করুন। বেস টেমপ্লেট হল সামগ্রিক নকশা, যার মধ্যে ভিত্তি, দেয়াল এবং ছাদ অন্তর্ভুক্ত রয়েছে। প্রতিটি স্বতন্ত্র কক্ষ (চাইল্ড টেমপ্লেট) মৌলিক কাঠামো উত্তরাধিকার সূত্রে পায় তবে বিভিন্ন ফ্লোরিং, পেইন্ট এবং আসবাবপত্র দিয়ে কাস্টমাইজ করা যায়।
টেমপ্লেট ইনহেরিটেন্সের সুবিধা
- কোড পুনরায় ব্যবহারযোগ্যতা: বেস টেমপ্লেটে সাধারণ উপাদানগুলি সংজ্ঞায়িত করে এবং একাধিক পৃষ্ঠা জুড়ে সেগুলি পুনরায় ব্যবহার করে অতিরিক্ত কোড এড়িয়ে চলুন।
- সামঞ্জস্য: আপনার ওয়েবসাইটের শিরোনাম, ফুটার এবং নেভিগেশন মেনুর মতো শেয়ার্ড উপাদানগুলির জন্য সত্যের একটি উৎস বজায় রেখে একটি সামঞ্জস্যপূর্ণ চেহারা নিশ্চিত করুন।
- রক্ষণাবেক্ষণযোগ্যতা: বেস টেমপ্লেটে পরিবর্তন করে আপডেট এবং পরিবর্তনগুলি সরল করুন, যা স্বয়ংক্রিয়ভাবে সমস্ত চাইল্ড টেমপ্লেটে প্রচার করবে।
- সংগঠন: আপনার টেমপ্লেটগুলিকে একটি লজিক্যাল এবং শ্রেণিবদ্ধ পদ্ধতিতে গঠন করুন, যা আপনার কোডবেসকে বোঝা এবং পরিচালনা করা সহজ করে তোলে।
- হ্রাসকৃত ডেভেলপমেন্ট টাইম: স্ক্র্যাচ থেকে তৈরি করার পরিবর্তে নতুন পৃষ্ঠাগুলির জন্য একটি সূচনা পয়েন্ট হিসাবে বেস টেমপ্লেট ব্যবহার করে সময় এবং প্রচেষ্টা বাঁচান।
মূল ধারণাগুলি বোঝা
১. বেস টেমপ্লেট
বেস টেমপ্লেট হল আপনার টেমপ্লেট ইনহেরিটেন্স কাঠামোর ভিত্তি। এতে সাধারণ উপাদান রয়েছে যা আপনার ওয়েবসাইটের সমস্ত বা বেশিরভাগ পৃষ্ঠা জুড়ে শেয়ার করা হবে। এর মধ্যে সাধারণত HTML কাঠামো, CSS স্টাইলশীট, জাভাস্ক্রিপ্ট ফাইল, হেডার, ফুটার এবং নেভিগেশন মেনু অন্তর্ভুক্ত থাকে।
একটি মৌলিক বেস টেমপ্লেটের উদাহরণ (base.html
):
{% block title %}My Website{% endblock %}
My Website
{% block content %}{% endblock %}
এই উদাহরণে, আমরা একটি শিরোনাম, নেভিগেশন মেনু, প্রধান কনটেন্ট এলাকা এবং ফুটার সহ একটি মৌলিক HTML কাঠামো সংজ্ঞায়িত করেছি। {% block %}
ট্যাগগুলি লক্ষ্য করুন, যা সেই বিভাগগুলিকে সংজ্ঞায়িত করে যা চাইল্ড টেমপ্লেটগুলিতে ওভাররাইড করা যেতে পারে।
২. ব্লক ডেফিনিশন
ব্লকগুলি বেস টেমপ্লেটের মধ্যে স্থানধারক যা চাইল্ড টেমপ্লেট দ্বারা প্রতিস্থাপিত বা সংশোধন করা যেতে পারে। এগুলি {% block %}
এবং {% endblock %}
ট্যাগ ব্যবহার করে সংজ্ঞায়িত করা হয়। ব্লকগুলি আপনাকে বেস টেমপ্লেটের বিভিন্ন অংশে নির্দিষ্ট কনটেন্ট ইনজেক্ট করতে দেয়।
উপরের base.html
উদাহরণে, আমরা দুটি ব্লক সংজ্ঞায়িত করেছি:
title
: এই ব্লকটি HTML ডকুমেন্টের শিরোনাম সংজ্ঞায়িত করে।content
: এই ব্লকটি পৃষ্ঠার প্রধান কনটেন্ট এলাকা সংজ্ঞায়িত করে।
৩. চাইল্ড টেমপ্লেট
চাইল্ড টেমপ্লেটগুলি বেস টেমপ্লেট উত্তরাধিকার সূত্রে পায় এবং বেস টেমপ্লেটে সংজ্ঞায়িত ব্লকগুলিকে ওভাররাইড করতে পারে। একটি বেস টেমপ্লেট উত্তরাধিকার সূত্রে পেতে, চাইল্ড টেমপ্লেটের শুরুতে {% extends %}
ট্যাগ ব্যবহার করুন।
একটি চাইল্ড টেমপ্লেটের উদাহরণ (index.html
) base.html
টেমপ্লেট প্রসারিত করছে:
{% extends 'base.html' %}
{% block title %}Home - My Website{% endblock %}
{% block content %}
Welcome to the Home Page!
This is the content of the home page.
{% endblock %}
এই উদাহরণে, আমরা base.html
টেমপ্লেট প্রসারিত করি এবং title
এবং content
ব্লকগুলিকে ওভাররাইড করি। title
ব্লকটি "Home - My Website" এ সেট করা হয়েছে এবং content
ব্লকটি হোম পেজের জন্য নির্দিষ্ট কনটেন্ট দিয়ে প্রতিস্থাপিত হয়েছে।
৪. super()
ফাংশন
super()
ফাংশন আপনাকে একটি চাইল্ড টেমপ্লেটের মধ্যে থেকে বেস টেমপ্লেটে সংজ্ঞায়িত একটি ব্লকের কনটেন্ট অ্যাক্সেস করতে দেয়। আপনি যখন কোনও ব্লক সম্পূর্ণরূপে প্রতিস্থাপন না করে তার কনটেন্ট যোগ বা সংশোধন করতে চান তখন এটি কার্যকর।
content
ব্লকে কনটেন্ট যোগ করতে super()
ব্যবহারের উদাহরণ:
{% extends 'base.html' %}
{% block content %}
{{ super() }}
This is additional content added to the base template's content block.
{% endblock %}
এই উদাহরণে, super()
ফাংশনটি base.html
টেমপ্লেট থেকে content
ব্লকের মূল কনটেন্ট সন্নিবেশ করে এবং তারপরে চাইল্ড টেমপ্লেটটি এর নিজস্ব কনটেন্ট নীচে যুক্ত করে।
ফ্লাস্কে টেমপ্লেট ইনহেরিটেন্স বাস্তবায়ন
ফ্লাস্কে টেমপ্লেট ইনহেরিটেন্স ব্যবহার করতে, আপনাকে আপনার টেমপ্লেটগুলিকে একটি লজিক্যাল ডিরেক্টরি কাঠামোতে সংগঠিত করতে হবে এবং আপনার টেমপ্লেটগুলি সনাক্ত করতে ফ্লাস্ককে কনফিগার করতে হবে।
১. ডিরেক্টরি কাঠামো
ফ্লাস্ক টেমপ্লেটগুলির জন্য একটি সাধারণ ডিরেক্টরি কাঠামো নিম্নরূপ:
my_project/
app.py
templates/
base.html
index.html
about.html
contact.html
static/
style.css
script.js
এই কাঠামোতে, templates
ডিরেক্টরিতে বেস টেমপ্লেট এবং চাইল্ড টেমপ্লেট সহ সমস্ত HTML টেমপ্লেট রয়েছে। static
ডিরেক্টরিতে CSS স্টাইলশীট এবং জাভাস্ক্রিপ্ট ফাইলের মতো স্ট্যাটিক ফাইল রয়েছে।
২. ফ্লাস্ক কনফিগারেশন
ডিফল্টরূপে, ফ্লাস্ক আপনার অ্যাপ্লিকেশনের মতো একই ডিরেক্টরিতে templates
নামের একটি ডিরেক্টরিতে টেমপ্লেটগুলি সন্ধান করে। আপনি ফ্লাস্ক অ্যাপ অবজেক্টের template_folder
অ্যাট্রিবিউট সেট করে এটি কাস্টমাইজ করতে পারেন।
একটি কাস্টম টেমপ্লেট ফোল্ডার ব্যবহার করার জন্য ফ্লাস্ক কনফিগার করার উদাহরণ:
from flask import Flask, render_template
app = Flask(__name__, template_folder='my_templates')
@app.route('/')
def index():
return render_template('index.html')
৩. টেমপ্লেট রেন্ডারিং
ফ্লাস্কে একটি টেমপ্লেট রেন্ডার করতে, render_template()
ফাংশনটি ব্যবহার করুন। এই ফাংশনটি আর্গুমেন্ট হিসাবে টেমপ্লেট ফাইলের নাম নেয় এবং রেন্ডার করা HTML স্ট্রিং প্রদান করে।
index.html
টেমপ্লেট রেন্ডার করার উদাহরণ:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
একটি চাইল্ড টেমপ্লেট রেন্ডার করার সময়, ফ্লাস্ক স্বয়ংক্রিয়ভাবে বেস টেমপ্লেট অন্তর্ভুক্ত করে এবং চাইল্ড টেমপ্লেটে সংজ্ঞায়িত ব্লক ওভাররাইডগুলি প্রয়োগ করে।
ব্যবহারিক উদাহরণ
উদাহরণ ১: একটি সাধারণ ব্লগ
আসুন একটি বেস টেমপ্লেট এবং ব্লগ পোস্টের জন্য পৃথক টেমপ্লেট সহ একটি সাধারণ ব্লগ তৈরি করি।
base.html:
{% block title %}My Blog{% endblock %}
My Blog
{% block content %}{% endblock %}
post.html:
{% extends 'base.html' %}
{% block title %}{{ post.title }} - My Blog{% endblock %}
{% block content %}
{{ post.title }}
Published on: {{ post.date }}
{{ post.content }}
{% endblock %}
এই উদাহরণে, post.html
টেমপ্লেটটি base.html
টেমপ্লেট প্রসারিত করে এবং ব্লগ পোস্টের শিরোনাম, তারিখ এবং কনটেন্ট সহ title
এবং content
ব্লকগুলিকে ওভাররাইড করে। post
ভেরিয়েবলটি ফ্লাস্ক রুট থেকে টেমপ্লেটে প্রেরণ করা হয়।
app.py:
from flask import Flask, render_template
app = Flask(__name__)
posts = [
{
'title': 'First Blog Post',
'date': '2023-10-27',
'content': 'This is the content of the first blog post.'
},
{
'title': 'Second Blog Post',
'date': '2023-10-28',
'content': 'This is the content of the second blog post.'
}
]
@app.route('/')
def index():
return render_template('index.html', posts=posts)
@app.route('/post/')
def post(post_id):
post = posts[post_id]
return render_template('post.html', post=post)
উদাহরণ ২: একটি বহু-ভাষার ওয়েবসাইট
একাধিক ভাষা সমর্থন করে এমন একটি ওয়েবসাইট তৈরির কথা ভাবুন। টেমপ্লেট ইনহেরিটেন্স প্রতিটি পৃষ্ঠার বিভিন্ন টেক্সট উপাদানগুলি পরিচালনা করতে সহায়তা করতে পারে। আপনি অনুবাদিত পাঠ্যের জন্য স্থানধারক সহ একটি বেস টেমপ্লেট তৈরি করতে পারেন এবং তারপরে প্রতিটি ভাষার জন্য চাইল্ড টেমপ্লেট তৈরি করতে পারেন। উদাহরণস্বরূপ, ধরা যাক আপনার একটি বেস টেমপ্লেট রয়েছে এবং আপনি ইংরেজি এবং ফরাসি সমর্থন করতে চান।
base.html:
{% block title %}{% endblock %}
{% block content %}{% endblock %}
index_en.html (ইংরেজি সংস্করণ):
{% extends "base.html" %}
{% block title %}Welcome to My Website{% endblock %}
{% block home_link %}Home{% endblock %}
{% block about_link %}About{% endblock %}
{% block content %}
Welcome!
This is the English version of the homepage.
{% endblock %}
index_fr.html (ফরাসি সংস্করণ):
{% extends "base.html" %}
{% block title %}Bienvenue sur mon site web{% endblock %}
{% block home_link %}Accueil{% endblock %}
{% block about_link %}À propos{% endblock %}
{% block content %}
Bienvenue !
Ceci est la version française de la page d'accueil.
{% endblock %}
এই সরলীকৃত উদাহরণে, প্রতিটি ভাষার সংস্করণ বেস টেমপ্লেট প্রসারিত করে এবং শিরোনাম, নেভিগেশন লিঙ্ক এবং প্রধান কনটেন্টের জন্য অনুবাদিত পাঠ্য সরবরাহ করে। এই পদ্ধতিটি আপনার ওয়েবসাইটের বিভিন্ন ভাষা সংস্করণ পরিচালনা করা সহজ করে তোলে।
সেরা অনুশীলন
- বেস টেমপ্লেটটি সহজ রাখুন: বেস টেমপ্লেটে কেবল সেই প্রয়োজনীয় উপাদানগুলি থাকা উচিত যা সমস্ত পৃষ্ঠা জুড়ে শেয়ার করা হয়।
- বর্ণনামূলক ব্লক নাম ব্যবহার করুন: ব্লকের নাম চয়ন করুন যা স্পষ্টভাবে তাদের উদ্দেশ্য নির্দেশ করে।
- আপনার টেমপ্লেটগুলিকে যৌক্তিকভাবে সংগঠিত করুন: ডিরেক্টরিতে সম্পর্কিত টেমপ্লেটগুলিকে একসাথে গ্রুপ করুন।
- গভীরভাবে নেস্টেড ইনহেরিটেন্স এড়িয়ে চলুন: জটিলতা এড়াতে আপনার ইনহেরিটেন্স শ্রেণিবিন্যাসের গভীরতা সীমিত করুন।
super()
ফাংশনটি বিচক্ষণতার সাথে ব্যবহার করুন: আপনি যখন বেস টেমপ্লেট থেকে কোনও ব্লকের কনটেন্ট যোগ বা সংশোধন করতে চান তখনইsuper()
ফাংশনটি ব্যবহার করুন।- টেমপ্লেট উপাদানগুলি ব্যবহার করার কথা বিবেচনা করুন: আরও জটিল ওয়েবসাইটগুলির জন্য, আপনার টেমপ্লেটগুলিকে ছোট, পুনরায় ব্যবহারযোগ্য উপাদানগুলিতে বিভক্ত করার কথা বিবেচনা করুন। এটি জিনজা২-এ অন্তর্ভুক্ত বা ম্যাক্রোগুলির মাধ্যমে অর্জন করা যেতে পারে তবে এগুলি একটি ভাল উত্তরাধিকার কৌশলকে পরিপূরক করা উচিত, প্রতিস্থাপন করা উচিত নয়।
উন্নত কৌশল
১. শর্তাধীন ব্লক ওভাররাইডিং
নির্দিষ্ট শর্তের ভিত্তিতে ব্লকগুলি শর্তসাপেক্ষে ওভাররাইড করতে আপনি আপনার টেমপ্লেটগুলির মধ্যে শর্তাধীন বিবৃতি ব্যবহার করতে পারেন। এটি আপনাকে ব্যবহারকারীর ভূমিকা, পছন্দ বা অন্যান্য কারণের উপর ভিত্তি করে আপনার পৃষ্ঠাগুলির কনটেন্ট কাস্টমাইজ করতে দেয়।
{% extends 'base.html' %}
{% block content %}
{% if user.is_authenticated %}
Welcome, {{ user.username }}!
This is the content for authenticated users.
{% else %}
Welcome!
Please log in to access more content.
{% endif %}
{% endblock %}
২. ম্যাক্রো ব্যবহার করা
জিনজা২ ম্যাক্রো পাইথনের ফাংশনের মতো। তারা আপনাকে HTML কোডের পুনরায় ব্যবহারযোগ্য স্নিপেটগুলি সংজ্ঞায়িত করতে দেয় যা আপনার টেমপ্লেটগুলির মধ্যে থেকে কল করা যেতে পারে। ম্যাক্রো টেমপ্লেট উপাদান যেমন ফর্ম উপাদান, নেভিগেশন মেনু এবং চিত্র গ্যালারী তৈরি করতে ব্যবহার করা যেতে পারে।
একটি পৃথক ফাইলে একটি ম্যাক্রো সংজ্ঞায়িত করার উদাহরণ (macros.html
):
{% macro input(name, type='text', value='') %}
{% endmacro %}
একটি টেমপ্লেটে ম্যাক্রো আমদানি এবং ব্যবহারের উদাহরণ:
{% from 'macros.html' import input %}
৩. টেমপ্লেট ফিল্টার
টেমপ্লেট ফিল্টারগুলি আপনাকে আপনার টেমপ্লেটগুলির মধ্যে ভেরিয়েবলের আউটপুট সংশোধন করতে দেয়। জিনজা২ capitalize
, lower
, upper
এবং date
এর মতো বেশ কয়েকটি বিল্ট-ইন ফিল্টার সরবরাহ করে। আপনি আপনার নিজস্ব কাস্টম ফিল্টারও সংজ্ঞায়িত করতে পারেন।
একটি তারিখ ফর্ম্যাট করতে date
ফিল্টার ব্যবহারের উদাহরণ:
Published on: {{ post.date | date('%Y-%m-%d') }}
উপসংহার
জিনজা২ সহ ফ্লাস্ক টেমপ্লেট ইনহেরিটেন্স আপনার টেমপ্লেটগুলি সংগঠিত করার, কোড পুনরায় ব্যবহারযোগ্যতা প্রচার করার এবং আপনার ওয়েব অ্যাপ্লিকেশন জুড়ে ধারাবাহিকতা নিশ্চিত করার জন্য একটি শক্তিশালী কৌশল। বেস টেমপ্লেট, ব্লক ডেফিনিশন এবং চাইল্ড টেমপ্লেটের মূল ধারণাগুলি বোঝার মাধ্যমে, আপনি ভালভাবে কাঠামোযুক্ত এবং রক্ষণাবেক্ষণযোগ্য টেমপ্লেট তৈরি করতে পারেন যা আপনার ওয়েব ডেভেলপমেন্ট কর্মপ্রবাহকে সহজ করে। DRY (Don't Repeat Yourself) নীতি গ্রহণ করুন এবং শক্তিশালী এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করতে টেমপ্লেট ইনহেরিটেন্স ব্যবহার করুন।
এই বিস্তৃত গাইডটি ফ্লাস্ক টেমপ্লেট ইনহেরিটেন্সের মৌলিক দিকগুলি অন্তর্ভুক্ত করেছে। এই নিবন্ধে বর্ণিত উদাহরণ এবং সেরা অনুশীলনগুলি অনুসরণ করে, আপনি কার্যকরভাবে আপনার ফ্লাস্ক প্রকল্পগুলিতে টেমপ্লেট ইনহেরিটেন্স প্রয়োগ করতে পারেন এবং একটি বিশ্বব্যাপী দর্শকদের জন্য সুসংগঠিত, রক্ষণাবেক্ষণযোগ্য এবং সামঞ্জস্যপূর্ণ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন। আপনার প্রকল্পের নির্দিষ্ট চাহিদা অনুসারে এই কৌশলগুলি মানিয়ে নিতে এবং আপনার টেমপ্লেট ডিজাইন ক্ষমতা আরও বাড়ানোর জন্য জিনজা২ এর উন্নত বৈশিষ্ট্যগুলি অন্বেষণ করতে ভুলবেন না।