১-৬ঃ Template কে Dynamic করা

index.html ফাইলে কিছু কোড লিখে ফেলি

আমাদের পেজে Hello, I am Harun Ur Rashid । কিন্তু এটা তো আমরা টেমপ্লেটের মাঝে নিজের হাতে তৈরি করেছি। আমরা এখন চাচ্ছি views.py ফাইলে আমাদের নাম পরিবর্তন করব, স্বয়ংক্রিয় ভাবে টেমপ্লেটেও নাম পরিবর্তন হয়ে যাবে।

পুর্বেই বলেছিলাম যে render()  ফাংশন তিনটি প্যারামিটার গ্রহণ করে, এই তৃতীয় প্যারামিটারটিকে context variable বলে। context variable  হিসেবে Dictionary ব্যাবহার করা হয়। এটা অনেকটা পাইপ লাইনের মত কাজ করে । এই পাইপ লাইনের মাধ্যমে view থেকে template এ ডাটা পাঠানো যায়।

তাহলে আমাদের render() এর রূপ হবে

render(request, ‘index.html’, {} )

এখানে Dictionary টি কে আমরা নিজের মনের মত সাজাতে পারি

এখন view দেখতে হবে,

আবারও index.html ফাইলকে পরিবর্তন করি,

আমরা টেমপ্লেট এর মধ্যে {{ }} চিহ্ন ব্যাবহার করেছি। একে জ্যাঙ্গো টেমপ্লেট ইঞ্জিন এর ভাষায় template variable বলা হয় । Variable এর ভ্যালু দেখার জন্য  {{ variable_name }} ব্যাবহার করা হয়।  অর্থাৎ,  Dictionary এর key এর ভ্যালু যদি সাধারন string, number হয় তাহলে {{ key_name }} ব্যাবহার করে লিখতে পারি। কিন্তু Dictionary এর key এর ভ্যালু যদি কন্ডিশন, লুপ ইত্যাদি হয় তাহলে {%  %} চিহ্ন ব্যাবহার করা হয়। একে Template Tag বলা হয়।    এভাবে আমরা ইচ্ছামত Dictionary এর key পরিবর্তন করে টেমপ্লেট এর Value পরিবর্তন করতে পারি ।

Template এ সকল পোষ্ট দেখানোঃ

এখন আমরা দেখব কিভাবে আমাদের এডমিন প্যানেল থেকে তৈরি করা সকল পোষ্ট আমাদের Template দেখানো যায় ।

প্রথমে views.py এর home() ভিউ দেখি। এই ভিউ এর মধ্যে ডাটাবেজে জমা হওয়া সকল পোষ্ট নিয়ে আসব। এরপর ভিউ থেকে টেমপ্লেটে এ পাঠিয়ে দেব।

from .models import Post  দ্বারা আমরা models.py ফাইলের Post  ক্লাসটি views.py ফাইলে import করলাম। আমরা যখন এডমিন প্যানেল থেকে নতুন নতুন Post তৈরি করছিলাম তখন আসলে Post ক্লাসে object তৈরি করছিল। এক একটি পোষ্ট আসলে এক একটি object. তাহলে সকল পোষ্ট আনতে হলে পাইথনের ভাষায় সকল objects নিয়ে আসতে হবে। Post.objects.all() দিলে সকল পোষ্ট লিস্ট আকারে চলে আসবে। এখানে Post হচ্ছে  models.py এর  Post ক্লাস । এখন এই পোষ্ট এর লিস্ট কে একটি variable এর মধ্যে জমা করলাম। আমরা প্রিন্ট করে দেখতে পারি  all_post  এর মধ্যে কি জমা হয়েছে । নিচের লাইনে লিখুন print(all_post)। পেজটি রিলোড দিয়ে টার্মিনালে লক্ষ করি

<QuerySet [<Post: my first post>, <Post: My 2nd post>]>

অর্থাৎ, all_post  একটি QuerySet ( Post.objects.all() কে Query বলে) যার মধ্যে লিস্ট আছে । লিস্টের মধ্যে লক্ষ করি , প্রতিটি পোষ্টের টাইটেল দেখাচ্ছে। model.py এর def __str__() ম্যাথড দ্বারা আমরা এই টাইটেল কে রিটার্ন করতে বলেছিলাম।

আমরা ফর লুপের মাধ্যমে প্রতিটা পোষ্ট আলাদা করে ফেলতে পারি ।

আমাদের Post ক্লাসের মধ্যে title ও description  ফিল্ড আছে। print(post.title), print(post.description) দিয়ে মজা দেখুন। প্রিতিবার কোড পরিবর্তন করার পর পেজ রিলোড দিতে ভোলা চলবে না।

পরবর্তী পোষ্ট >>

Site Footer