বাংলায় জ্যাঙ্গো

বাংলায় জ্যাঙ্গো (Django Tutorial in Bangla) টিউটোরিয়ালের আজকের পর্বে আপনাদের স্বাগতম। গত পর্বে আমরা দেখেছিলাম মডেল রিলেশন কি এবং মডেল রিলেশনের মাধ্যমে জেলা ও বিভাগের তালিকা এডমিন এপ এর মাধ্যমে তৈরী করেছিলাম । এডমিন এপ ব্যাবহার করে একাধিক বিভাগ ও তাদের জেলাগুলো তৈরী করে ফেলি। আজ আমরা জেলা তালিকা তৈরী করা ও বিভিন্ন ভাবে ফিল্টার করা দেখব। যেমন, শিক্ষার হার ৫০ শতাংশ এর বেশি জেলার তালিকাগুলো দেখাও, খুলনা বিভাগের সকল জেলা লিষ্ট ইত্যাদি।

প্রথমে localhost:8000/info/districts ঠিকানায় সকল জেলার তালিকা দেখানোর ব্যাবস্থা করি। প্রথমে মুল urls.py (banglaidj/urls.py) কে বলে দেব information এর সকল এপ এর urls info/ এর পর থেকে শুরু হবে

যেমনঃ localhost:8000/info/districts

localhost:8000/info/division

localhost:8000/info/test-url ইত্যাদি

# banglaidj/urls.py
path('info/', include('information.urls'), name='information'),

information এপ এর মধ্যে urls.py  যুক্ত করি।

from django.conf.urls import url
from . import views

urlpatterns = [
    path('districts/', views.district_list, name='districts'),

]
# information/views.py

from django.shortcuts import render

def district_list(request):
    return render(request, 'information/districts.html')

templates information নামে একটি ডিরেক্টরী ও তার মধ্যে districts.html তৈরী করি।

এখন আমার districts ভিউ এর মধ্যে সকল জেলা তালিকা নিয়ে আসব। উল্লেখ্য জেলা তৈরী করার জন্য information এপ এর মধ্যে Districts নামে একটি মডেল তৈরী করেছিলাম । মডেলটিকে এখানে import করি।

from .models import Districts

ভিউ লিখে ফেলি

# information/views.py

from django.shortcuts import render
from .models import Districts


def district_list(request):
    districts = Districts.objects.all()
    context = {
        'districts': districts,
    }
    return render(request, 'information/districts.html', context)

টেমপ্লেট এ একটি তালিকা তৈরী করি

# templates/information/districts.html

{% extends 'base.html' %}

{% block content %}
    <h2>বাংলাদেশের জেলাসমূহ</h2>
    <table class="table table-striped">
        <tr>
            <th>নাম</th>
            <th>বিভাগ</th>
            <th>শিক্ষার হার</th>
            <th>জনসংখ্যার হার </th>
            <th>ভ্রমন করেছেন ? </th>
        </tr>
        {% for district in districts %}
            <tr>
                <td>{{ district.name }}</td>
                <td>{{ district.division }}</td>
                <td>{{ district.education_rate }}</td>
                <td>{{ district.population_density }}</td>
                <td>{{ district.visited }}</td>
            </tr>
        {% endfor %}
    </table>
{% endblock %}

ফিল্টার তৈরীঃ  

আমরা যখন একটি সেট এর সকল উপাদান পেতে চাই তখন all() ব্যাবহার করি , যেমনঃ Districts.objects.all() । কন্তু যখন আমরা এই সেট এর কিছু সাবসেট পেতে চাই তখন filter() ব্যাবহার করি। যেমন আমরা এমন জেলাসমুহের লিষ্ট দেখতে চাই যেখানে আমি পরিদর্শন করেছি। অর্থাৎ, visited=True । তাহলে আমাদের Query হবে Districts.objects.filter(visited=True) । সুতরাং districts = Districts.objects.all() এর স্থলে Districts.objects.filter(visited=True) বসায়। ফলাফল দেখুন ভ্রমন করেছেনকলামের False রো টি চলে গিয়েছে।

এখন আমরা চাই যে জেলার শিক্ষার হার ৫০ এর উপর হলে লিষ্ট এ দেখাবে।

Districts.objects.filter(education_rate__gt=50 )

৫০ এর সমান বা বেশি হলে

Districts.objects.filter(education_rate__gte=50 )

৫০ এর কম হলে

Districts.objects.filter(education_rate__lt=50 )

৫০ এর সমান বা কম হলে

Districts.objects.filter(education_rate__lte=50 )

কিন্তু আমরা যদি খুলনা বিভাগের সকল জেলা দেখার জন্য Districts.objects.filter(division=’Khulna’) ব্যাবহার করি তাহলে ভুল দেখাবে কারন Districts মডেলে লক্ষ করুন, division ফিল্ডটি Division মডেলের সাথে ForeignKey সম্পর্কে যুক্ত। ‘Khulna’ আসলে Division মডেলের name ফিল্ডের ভ্যালু। এভাবে অন্য মডেলের সাথে রিলেশন যুক্ত ফিল্ডের query করতে __ ব্যাবহার করা হয়। যেমন

Districts.objects.filter(division__name=’Khulna’)

এখানে ‘Khulna’ আর ‘khulna’ এক নয়।

division বেজড ফিল্টার আমরা আরেক পদ্ধতিতে করতে পরি । প্রথমে ’Khulna’ নামের Division অবজেক্টকে query করি। একটি অবজেক্ট query করতে get() ম্যাথড ব্যাবহার করা হয়।

div = Division.objects.get(name=’Khulna’)

# information/views.py 

from django.shortcuts import render
from .models import Districts, Divisions


def district_list(request):
    div = Divisions.objects.get(name='Khulna')
    districts = Districts.objects.filter(division=div)
    context = {
        'districts': districts,
    }
    return render(request, 'information/districts.html', context)

ফিল্টার সম্পর্কে আরো বিস্তারিত জানতে জ্যাঙ্গো ডকুমেন্টেশন দেখুন

পরবর্তি পোষ্টঃ অনুশীলনী-২ঃ বিভাগ তালিকা তৈরী 

2
Leave a Reply

avatar
0 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors
  Subscribe  
newest oldest most voted
Notify of