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

Uncategorized

অনুশীলনীঃ২- বিভাগ তালিকা তৈরী

by , on
April 27, 2017

বাংলায় জ্যাঙ্গো টিউটোরিয়ালের প্রিয় শিক্ষার্থীবৃন্দ , আসসালামুয়ালাইকুম।

আমরা ইতমধ্যে মডেল রিলেশন ও এডমিন কাষ্টমাইজেশন এবং ফিল্টার শিখেছি।   সেই জ্ঞানকে কাজে লাগিয়ে আমরা এখন একটা অনুশীলন করব। আমরা একটি বিভাগ তালিকা তৈরী করব এবং প্রতিটি বিভাগে ক্লিক করলে ওই বিভাগের জেলাসমূহের তালিকা দেখাবে।

# information/urls.py

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

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

]

 

# informations/views.py

def division_list(request):
    divisions = Divisions.objects.all()
    context = {
        'divisions': divisions,
    }
    return render(request, 'information/division_list.html', context)

templates/information/division_list.html এ নতুন টেম্প্লেট যুক্ত করি

# templates/information/division_list.html

{% extends 'base.html' %}

{% block content %}
<h2>বাংলাদেশের বিভাগসমূহ </h2>
<table class="table table-striped">
    <tr>
        <th>নাম</th>
        <th>জনসংখ্যা </th>
        <th>আয়তন </th>
    </tr>
    {% for div in divisions %}
        <tr>
            <td>{{ div.name }}</td>
            <td>{{ div.population }}</td>
            <td>{{ div.area }}</td>
        </tr>
    {% endfor %}
</table>
{% endblock %}

Top menu এ বিভাগ তালিকার লিন্ক যুক্ত করি।

# templates/base.html

<ul class="nav nav-tabs">
                <li><a href="{% url 'home' %}">প্রচ্ছদ </a></li>
                <li><a href="{% url 'post-list' %}">পোষ্ট তালিকা </a></li>
                <li><a href="{% url 'cost-list' %}">খরচের তালিকা</a></li>
                <li><a href="{% url 'districts' %}">জেলা তালিকা</a></li>
                <li><a href="{% url 'divisions' %}">বিভাগ তালিকা</a></li>
</ul>

এখন প্রতিটা ডিভিশনের সাথে লিঙ্ক যুক্ত করব। লিঙ্ক এ ক্লিক করলে ওই বিভাগের জেলাসমুহের তালিকা দেখাবে। প্রথমে এই লিঙ্ক এর url  তৈরী করি । এই কাজটি ঠিক ব্লগের ডিটেইল পোষ্ট তৈরী করার মত।

# information/urls.py

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

urlpatterns = [
    path('districts/', views.district_list, name='districts'),
    path('divisions/', views.division_list, name='divisions'),
    path('dists-of-div/<int:div_id>/', views.dists_of_division,            name = 'dists_of_division'),

]

 

# information/views.py

def dists_of_division(request, div_id):
    division = Divisions.objects.get(pk=div_id)
    districts = Districts.objects.filter(division=division)
    context = {
        'districts': districts,
        'division': division,
    }
    return render(request, 'information/dists_of_division.html', context)

 

# templates/information/dist_of_division.html

{% extends 'base.html' %}

{% block content %}
    <h2>{{division.name}} বিভাগের জেলাসমূহ </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 %}

 

 

 

Uncategorized

জ্যাঙ্গো ফিল্টার

by , on
April 18, 2017

বাংলায় জ্যাঙ্গো (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)

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

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