Flask-এর Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে আপনি কাস্টম টেমপ্লেট ফিল্টার তৈরি করতে পারেন। এই ফিল্টারগুলি আপনার টেমপ্লেটের মধ্যে ডাটা প্রক্রিয়া বা পরিবর্তন করতে সাহায্য করে। Flask আপনাকে টেমপ্লেট ফিল্টার তৈরি করার অনুমতি দেয়, যার মাধ্যমে আপনি ডাইনামিক ডেটা প্রসেস করতে পারেন।
Custom Template Filter তৈরি করার প্রক্রিয়া
Flask-এ কাস্টম ফিল্টার তৈরি করতে @app.template_filter() ডেকোরেটর ব্যবহার করা হয়। এই ফিল্টারটি টেমপ্লেটে ব্যবহার করা যেতে পারে, যেখানে আপনি ডাটা বা ভ্যারিয়েবলকে একটি কাস্টম ফিল্টারের মাধ্যমে প্রক্রিয়াজাত করবেন।
১. Custom Filter তৈরি করা
উদাহরণ:
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা একটি স্ট্রিংকে পলিনড্রোম (palindrome) চেক করবে। প্রথমে Flask অ্যাপের মধ্যে একটি কাস্টম ফিল্টার তৈরি করা হবে।
from flask import Flask
app = Flask(__name__)
# কাস্টম টেমপ্লেট ফিল্টার তৈরি
@app.template_filter('reverse_string')
def reverse_string(s):
return s[::-1]
@app.route("/")
def home():
return "Welcome to Flask!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
@app.template_filter('reverse_string')ডেকোরেটর দিয়ে একটি নতুন ফিল্টার তৈরি করা হয়েছে যা স্ট্রিংকে উল্টো করে দেয়।reverse_string(s)ফাংশনটি স্ট্রিংsকে উল্টো করে।
২. টেমপ্লেট ফিল্টার ব্যবহার করা
আপনার টেমপ্লেট ফাইলে এই কাস্টম ফিল্টারটি ব্যবহার করতে পারেন।
উদাহরণ:
HTML টেমপ্লেট (e.g. index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom Filter Example</title>
</head>
<body>
<h1>{{ "hello" | reverse_string }}</h1>
</body>
</html>
এখানে:
{{ "hello" | reverse_string }}: এই লাইনটি কাস্টম ফিল্টারটি ব্যবহার করে "hello" স্ট্রিংটি উল্টো করে দেখাবে। আউটপুট হবে "olleh"।
৩. কাস্টম ফিল্টার যা স্ট্রিং ফরম্যাট করবে
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা স্ট্রিংয়ে ক্যাপিটালাইজ (capitalize) অথবা লোয়ারকেস (lowercase) করতে পারে।
# কাস্টম ফিল্টার যা স্ট্রিংকে ক্যাপিটালাইজ করবে
@app.template_filter('capitalize_string')
def capitalize_string(s):
return s.capitalize()
# কাস্টম ফিল্টার যা স্ট্রিংকে লোয়ারকেস করবে
@app.template_filter('lowercase_string')
def lowercase_string(s):
return s.lower()
HTML টেমপ্লেট:
<p>{{ "hello world" | capitalize_string }}</p> <!-- আউটপুট: Hello world -->
<p>{{ "HELLO WORLD" | lowercase_string }}</p> <!-- আউটপুট: hello world -->
৪. কাস্টম ফিল্টার যা সংখ্যা ফরম্যাট করবে
একটি কাস্টম ফিল্টার তৈরি করা যা সংখ্যাকে একটি নির্দিষ্ট ফরম্যাটে রূপান্তর করবে, যেমন দশমিকের পর সংখ্যা সীমিত করা।
@app.template_filter('format_decimal')
def format_decimal(value, decimal_places=2):
try:
return f"{value:.{decimal_places}f}"
except ValueError:
return value
HTML টেমপ্লেট:
<p>{{ 123.4567 | format_decimal(2) }}</p> <!-- আউটপুট: 123.46 -->
<p>{{ 123.4567 | format_decimal(3) }}</p> <!-- আউটপুট: 123.457 -->
এখানে:
format_decimal(2)ফিল্টারটি সংখ্যাটিকে দশমিকের পরে দুটি অংকে রূপান্তর করবে।
৫. ফিল্টারের আর্গুমেন্ট ব্যবহার
Flask-এ কাস্টম ফিল্টার তৈরির সময় আপনি ফিল্টারে আর্গুমেন্টও পাস করতে পারেন। এই আর্গুমেন্টটি ফিল্টার ফাংশনের মাধ্যমে প্রসেস করা হবে।
উদাহরণ:
@app.template_filter('truncate_string')
def truncate_string(s, max_length):
if len(s) > max_length:
return s[:max_length] + '...'
return s
HTML টেমপ্লেট:
<p>{{ "This is a very long string." | truncate_string(10) }}</p>
এখানে:
truncate_string(10)ফিল্টারটি স্ট্রিংটির দৈর্ঘ্য 10 ক্যারেকটার পর্যন্ত কাটবে এবং শেষে...যোগ করবে।
আউটপুট:
This is a...
৬. কাস্টম ফিল্টারের জন্য ডিফল্ট মান নির্ধারণ করা
Flask-এ আপনি ফিল্টার তৈরির সময় ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে ফিল্টারটি কখনও ব্যর্থ না হয়।
উদাহরণ:
@app.template_filter('safe_divide')
def safe_divide(a, b=1):
try:
return a / b
except ZeroDivisionError:
return "Cannot divide by zero"
এখানে:
b=1ডিফল্ট মান ব্যবহার করা হয়েছে যাতে যদি দ্বিতীয় আর্গুমেন্ট সরবরাহ না করা হয় তবে ফিল্টারটি স্বয়ংক্রিয়ভাবে1দিয়ে ভাগ করবে।
Flask-এ কাস্টম টেমপ্লেট ফিল্টার তৈরি করা খুবই সহজ এবং শক্তিশালী। এটি আপনাকে আপনার টেমপ্লেটের মধ্যে ডেটা প্রক্রিয়া বা পরিবর্তন করার জন্য বিশেষ ফিল্টার তৈরি করতে সহায়ক হয়। কাস্টম ফিল্টার তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের টেমপ্লেটের কার্যকারিতা আরও বাড়াতে পারেন এবং পুনরায় ব্যবহারযোগ্য কোড তৈরি করতে পারেন।
Read more