আমরা আজকে আমাদের base.html টা রেডি করে ফেলবো তবে একটু ডিফারেন্ট ভাবে। বেস্ট প্রাকটিস হচ্ছে ওয়েবসাইট এত হেডার,ফুটার, base.html কে core নামে একটা অ্যাপ তৈরি করে সেখানে রাখা। আমরাও সেটাই করবো।
django-admin startapp core
অ্যাপ তৈরির পর সেটাকে আমরা সেটিংস এ রেজিষ্টার করাবো অবশ্যই। এই অ্যাপ এর মধ্যে templates নামে একটা ফোল্ডার করে সেখানে base.html ইউজ করবো। এর মধ্যে আমরা ব্লক ট্যাগ ইউজ করবো, tailwand সিএসএস কে অ্যাড করে দিবো। আমাদের nav বার এর জন্যে আমরা আলাদা একটা ফাইল navbar.html নামে খুলে নিবো। এখন চিন্তা করে দেখো যে এই navbar.html এ একটা navbar থাকবে যেটা আসলে সব পেজ এর জন্যেই কমন তার মানে এটার মধ্যে base.html কে ইনহেরিট করার প্রয়োজন নেই, আমরা include ট্যাগ দিয়ে base.html এ এটাকে ইউজ করবো। এভাবে ভেঙে ভেঙে কাজ করলে আমাদের কোড দেখতে খুব বেশি বড়ো মনে হয় না সেই সাথে ছোটো পার্ট গুলা ম্যানেজ করাও অনেক ইজি হয়ে যায়।
এখন nav বার এ logged ইন ইউজার এর জন্যে আমরা report, deposit, withdraw,logout মেনু দেখাবো আর non logged in ইউজার এর জন্যে register,login মেনু দেখাবো। এখন কোনো একজন ইউজার লগ ইন অবস্থায় আছে বুঝবো কিভাবে টেমপ্লেট থেকে? আমরা যদি request.user.is_authenticated ইউজ করি এবং সেটা যদি ট্রু হয় তাইলে সেই ইউজার টা loggedin অবস্থায় আছে অন্যথায় নাই।
এখন আমরা আমাদের home পেজ এর জন্যে index.html নামে একটা ফাইল খুলবো সেখানে আমাদের base.html ইনহেরিট করে navbar.html কে ইনক্লুড করে নিবো। এই হোম পেজ এর জন্যে একটা ভিউজ লিখবো, যেহেতু সেখানে কোনো লজিক্যাল কাজ, ফরম এর ব্যাপার, ডিটেইলস দেখার কোনো ব্যাপার নাই জাস্ট একটা টেমপ্লেট কে রেন্ডার করবো সেজন্যে আমরা class based ভিউ এর টেমপ্লেট ভিউ কে ইউজ করতেছি।
core/views.py
from django.shortcuts import render
from django.views.generic import TemplateView
# Create your views here.
class HomeView(TemplateView):
template_name = 'index.html'
এখন যেহেতু আমাদের হোম পেজ টা core অ্যাপ এর মধ্যে আছে সো তুমি চাইলে সেটার জন্যে ইউআরএল টা core অ্যাপ এর urls.py এও লিখতে পারো অথবা inner প্রজেক্ট ফোল্ডার এর urls.py এও লিখতে পারো। আমরা inner প্রজেক্ট এ অ্যাড করতেছি।
mamar_bank/urls.py
from django.contrib import admin
from django.urls import path, include
from core.views import HomeView
urlpatterns = [
path('', HomeView.as_view(), name='home'),
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
]