Flask একটি মাইক্রোফ্রেমওয়ার্ক হওয়ায় এটি খুবই লাইটওয়েট এবং কাস্টমাইজেবল, তবে HTML ফাইল ডায়নামিকভাবে জেনারেট করার জন্য Jinja2 নামক একটি শক্তিশালী টেমপ্লেট ইঞ্জিন ব্যবহার করে। Jinja2 টেমপ্লেট ইঞ্জিন Flask অ্যাপ্লিকেশনে HTML, XML, বা অন্যান্য ফরম্যাটের ডাইনামিক কনটেন্ট তৈরি করতে সহায়ক।
Jinja2 কী?
Jinja2 একটি পপুলার এবং শক্তিশালী টেমপ্লেট ইঞ্জিন যা Python ভিত্তিক। এটি আপনাকে HTML ফাইলের মধ্যে Python কোড মিশ্রিত করতে দেয় এবং ডায়নামিক কন্টেন্ট রেন্ডার করতে সাহায্য করে। Flask-এ Jinja2 টেমপ্লেট ইঞ্জিন স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়।
Jinja2-এর মাধ্যমে আপনি:
- ভ্যারিয়েবলকে HTML ডকুমেন্টের মধ্যে ইনজেক্ট করতে পারবেন।
- লজিকাল ফাংশন যেমন লুপ এবং কন্ডিশনাল স্টেটমেন্ট ব্যবহার করতে পারবেন।
- ব্লক এবং ইনহেরিটেন্সের মাধ্যমে টেমপ্লেট গঠন করতে পারবেন।
Flask এবং Jinja2 এর সম্পর্ক
Flask একটি micro-framework, তাই এটি সহজে কাস্টমাইজ করা যায় এবং গতি ও প্রক্রিয়ার জন্য মিনি-কনফিগারেশন প্রস্তাব করে। Flask-এ HTML রেন্ডারিং এবং ডাইনামিক কনটেন্ট প্রদর্শন করার জন্য Jinja2 ব্যবহার করা হয়।
Flask render_template() ফাংশন ব্যবহার করে Jinja2 টেমপ্লেট রেন্ডারিং প্রক্রিয়াটিকে সহজ করে তোলে। এটি HTML ফাইলের মধ্যে Python ভ্যারিয়েবল পাস করতে এবং কন্ডিশনাল লজিক ইমপ্লিমেন্ট করতে সাহায্য করে।
Jinja2 এর মূল বৈশিষ্ট্য
ভ্যারিয়েবল ব্যবহার
Jinja2 টেমপ্লেটে আপনি Python ভ্যারিয়েবল ইনজেক্ট করতে পারেন।<h1>স্বাগতম, {{ username }}!</h1>Flask থেকে:
@app.route("/hello/<username>") def hello(username): return render_template("hello.html", username=username)এখানে:
{{ username }}: Flask থেকে পাস করাusernameভ্যারিয়েবলটি HTML ফাইলে রেন্ডার হবে।
কন্ডিশনাল স্টেটমেন্ট
Jinja2-এ আপনি কন্ডিশনাল লজিক ব্যবহার করতে পারেন:{% if user.is_authenticated %} <h1>স্বাগতম, {{ user.username }}!</h1> {% else %} <h1>আপনার লগইন প্রয়োজন!</h1> {% endif %}এখানে:
{% if ... %}: কন্ডিশনাল স্টেটমেন্ট যা লজিকাল চেক করে।{% endif %}: কন্ডিশনাল লজিক বন্ধ করে।
লুপ
Jinja2-এ লুপ ব্যবহার করে একটি আইটেমের তালিকা বা অন্য কোনও ডেটা সংগ্রহের উপর লুপ করতে পারেন:<ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul>Flask থেকে:
@app.route("/items") def items(): items = ["আপেল", "কমলা", "কলা"] return render_template("items.html", items=items)ফিল্টার ব্যবহার
Jinja2 বিভিন্ন ফিল্টার সরবরাহ করে যা ডেটা প্রসেসিং করতে সহায়ক। উদাহরণস্বরূপ,lowerফিল্টার ব্যবহার করে টেক্সটকে ছোট হাতের অক্ষরে রূপান্তর করতে পারেন:<p>{{ name | lower }}</p>এই কোডে:
{{ name | lower }}:nameভ্যারিয়েবলটি ছোট হাতের অক্ষরে রেন্ডার হবে।
টেমপ্লেট ইনহেরিটেন্স
Jinja2 টেমপ্লেট ইনহেরিটেন্স সিস্টেম সমর্থন করে, যা আপনার অ্যাপ্লিকেশনে একাধিক টেমপ্লেট শেয়ার করতে সাহায্য করে। উদাহরণস্বরূপ, আপনার কাছে একটি বেস টেমপ্লেট থাকতে পারে এবং অন্যান্য টেমপ্লেটগুলিতে সেই টেমপ্লেটের অংশ ব্যবহার করতে পারেন।base.html:
<!DOCTYPE html> <html> <head><title>{% block title %}বেস টেমপ্লেট{% endblock %}</title></head> <body> <div class="container"> {% block content %}এই অংশটি ডিফল্ট কন্টেন্ট{% endblock %} </div> </body> </html>child.html:
{% extends "base.html" %} {% block title %}স্বাগতম পেজ{% endblock %} {% block content %} <h1>স্বাগতম, {{ username }}!</h1> {% endblock %}এখানে:
{% extends "base.html" %}: শিশু টেমপ্লেটের জন্য বেস টেমপ্লেট প্রসারণ করে।{% block content %}: শিশু টেমপ্লেটের কাস্টম কন্টেন্ট এন্ট্রি করে।
Flask-এ Jinja2 ব্যবহার
Flask অ্যাপ্লিকেশনে Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করতে render_template() ফাংশন ব্যবহার করা হয়। এর মাধ্যমে আপনি আপনার HTML টেমপ্লেট ফাইল রেন্ডার করতে পারেন এবং তাতে ডাইনামিক ভ্যালু পাস করতে পারেন।
উদাহরণ:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/welcome/<username>")
def welcome(username):
return render_template("welcome.html", username=username)
if __name__ == "__main__":
app.run(debug=True)
welcome.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>স্বাগতম</title>
</head>
<body>
<h1>স্বাগতম, {{ username }}!</h1>
</body>
</html>
এখানে:
render_template("welcome.html", username=username):usernameভ্যারিয়েবলটিwelcome.htmlটেমপ্লেটে পাস করা হচ্ছে।
Jinja2 একটি অত্যন্ত শক্তিশালী টেমপ্লেট ইঞ্জিন, যা Flask-এ ডাইনামিক HTML তৈরি করতে সহায়ক। এটি ভ্যারিয়েবল, কন্ডিশনাল লজিক, লুপ, ফিল্টার এবং টেমপ্লেট ইনহেরিটেন্সের মতো ফিচার প্রদান করে, যা ডাইনামিক ওয়েব পেজ তৈরির জন্য অত্যন্ত কার্যকর। Flask-এ Jinja2 ব্যবহার করে আপনি সহজেই ডাইনামিক কনটেন্ট রেন্ডার করতে পারেন, যা ওয়েব অ্যাপ্লিকেশনকে আরো শক্তিশালী এবং ব্যবহারকারী বান্ধব করে তোলে।
Read more