# ইউআরএল কনফিগারেশন

ইউআরএল (URL) হল ওয়েবসাইটের ঠিকানা, যেমন <http://google.com/> এটা একটা ইউআরএল, আবার <http://django.howtocode.com.bd/> এটাও একটা ইউআরএল, আবার <http://django.howtocode.com.bd/tutorial/2.html> এটাও একটা ইউআরএল!

একটা ওয়েবসাইটের অনেক/অগনিত ইউআরএল থাকতে পারে, একেক ইউআরএলে একেকটা বিষয় থাকতে পারে, আপনি ইউআরএল গুলোকে কম্পিউটারে ফোল্ডার/ডিরেক্টরি হিসেবে কল্পনা করতে পারেন। যেমন ধরুন কম্পিটারে যদি আপনি এই mycomputer/user/songs/ ডিরেক্টরিতে যান তাহলে সে ডিরেক্টরিতে থাকা সকল গান এর লিস্ট দেখতে পাবেন। আবার যদি এই mycomputer/user/images/ ডিরেক্টরিতে যান তাহলে সে ডিরেক্টরিতে থাকা সকল ইমেজের লিস্ট দেখতে পাবেন।

ওয়েবসাইটের ইউআরএল এর ব্যপারটাও এমন, যেমন ধরুন আপনি যদি এই <http://django.howtocode.com.bd/> ইউআরএল এ যান তাহলে আপনার সামনে জ্যাঙ্গো টিউটোরিয়ালের হোম পেইজ প্রদর্শিত হবে, আবার যদি <http://django.howtocode.com.bd/tutorial/2.html> ইউ আর এলে যান তাহলে জ্যাঙ্গো টিউটোরিয়ালের একটা স্পেসিফিক টিউটোরিয়াল পেইজ আপনার সামনে প্রদর্শিত হবে।

আমরা জেনেছি যে ব্রাউজারে যখন আমরা কোন ইউআরএল লিখে এন্টার চাপি তখন সেখান থেকে একটা রিকুয়েস্ট সেই ইউআরএল বা ওয়েবসাইটের সার্ভারে চলে যায়! তারপর সেই ওয়েবসাইটের সার্ভার সিদ্ধান্ত নেয় যে রিকুয়েস্ট করা ব্রাউজারের কাছে কোন বিষয়গুলো রেসপন্স হিসেবে পাঠানো হবে, আমরা এটাও জেনেছি যে জ্যাঙ্গোতে এই সিদ্ধান্ত নেয়ার কাজটা আসলে ‘ভিউ’ করে থাকে!।

আমরা যেটা এখনো জানি না সেটা হল, ইউজার ঠিক কোন ইউআরএল এ রিকুয়েস্ট করলে আমাদের প্রোজেক্টের কোন ভিউটা এক্সিকিউট হবে এবং ইউজারকে রেসপন্স পাঠাবে!

আগের চ্যাপ্টারে আমরা একটা ভিউ তৈরি করেছি index নামে। এখন আমাদেরকে ঠিক করে দিতে হবে যে কোন ইউআরএল এ রিকুয়েস্ট আসলে এই ভিউটা তার ‘Hello World!’ লেখাটি প্রদর্শন করবে! ইউআরএল গুলো নিয়ে কাজ করার জন্য আমাদের প্রোজেক্ট ফোল্ডারে urls.py নামে একটা ফাইল পাবেন, সেটা টেক্সট এডিটরে ওপেন করুন।

প্রথম দেখায় মনে হতে পারে যে সেখানে হাজার হাজার লাইন কোড লেখা রয়েছে, কিন্তু একটু খেয়াল করলেই দেখবেন যে উপরের বিশাল অংশটি আসলে কমেন্ট! ইগনোর করুন। মূল কোড হল নিচের দিকের কোড গুলো, যা দেখতে এরকমঃ

```
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]
```

প্রথম লাইনে url ফাংশনটি ইম্পোর্ট করা হয়েছে, সেটা একটু পরই কাজে লাগবে। দ্বিতীয় লাইনে এডমিন অ্যাপ ইম্পোর্ট করা হয়েছে। এডমিন কি তা নিয়ে আমরা পরে আলোচনা করব, এখানে এতটুকু বুঝুন যে এডমিন অ্যাপটি এখানে ইম্পোর্ট করা হয়েছে এটা ঠিক করে দেয়ার জন্য যে সেই অ্যাপটা ঠিক কোন ইউআরএল এ গেলে পাওয়া যাবে!

এর পর urlpatterns নামে একটা লিস্ট দেখা যাচ্ছে, যার মধ্যে ইউআরএল ম্যাপারগুলো থাকবে, এবং কোন ইউআরএল টা কোন ভিউকে কল করবে সেটা থাকবে। আপাতত লিস্টে একটা মাত্র আইটেম রয়েছে

```
url(r'^admin/', admin.site.urls)
```

`url( )` এর ভিতরে সাধারনত দুটি প্যারামিটার থাকবে। একটা হল ইউআরএল ম্যাপার, যা রেগুলার এক্সপ্রেশন হিসেবে লেখা হবে। আরেকটা প্যারামিটার হল ভিউ। ব্রাউজারের রিকুয়েস্ট করা কোন ইউআরএল যদি এই লিস্টের কোন ইউআরএল ম্যাপারের সাথে ম্যাচ করে তাহলে সেই ম্যাপারের সাথে সংশ্লিষ্ট ভিউটি কল হবে।

কঠিন লাগছে? আমাদের ভিউটি এড করলে বুঝতে আরো সহজ হবে। প্রথমেই আমাদের index ভিউটি ইম্পোর্ট করে নিতে হবেঃ

```
from myapp.views import index
```

এখন urlpatterns লিস্টে একটা আইটেম যোগ করে দিতে হবেঃ

```
url(r’^myview/$’, index)
```

url( ) এর দ্বিতীয় প্যারামিটার হিসেবে আমাদের ভিউটিকে পাস করলাম, আর প্রথম প্যারামিটার হিসেবে একটা ইউআরএল ম্যাপার দিলাম। `r’^myview/$’` ম্যাপারটি শুধুমাত্র এই ইউআরএল এর সাথে ম্যাচ করবেঃ

[www.mysite.com/myview/\\](http://www.mysite.com/myview/\\)
(যেটা আমাদের লোকাল সার্ভারের ক্ষেত্রে এরকমঃ <http://127.0.0.1:8000/myview/>)

উক্ত ইউআরএল এ কোন ব্রাউজার রিকুয়েস্ট করলে আমাদের index ভিউটি কল হবে এবং সেটা “Hello World!” স্ট্রিং টি রেসপন্স হিসেবে পাঠিয়ে দিবে, আর ব্রাউজার সেই স্ট্রিংটি সুন্দর ভাবে আমাদের সামনে প্রদর্শন করবে!

> লক্ষ্য করুন, ইউআরএল ম্যাপার কিন্তু আপনার ওয়েবসাইটের ডোমেইন নেম এর সাথে ম্যাচ করবেনা, ডোমেইন এর পর থেকে ম্যাচ করবে। অর্থাৎ সাইটের ইউআরএল যদি হয় [www.mysite.com/mypy](http://www.mysite.com/mypy) তাহলে এখানে [www.mysite.com](http://www.mysite.com) টিকে কোন ইউআরএল ম্যাপারের সাথে ম্যাচ করা হবেনা, বরং চেক করে দেখা হবে যে ডোমেইনের পরের অংশ ম্যাচ করে কিনা, এক্ষেত্রে শুধু mypy কোন ইউআরএল ম্যাপারের সাথে ম্যাচ করে কিনা দেখা হবে!

আমাদের urls.py সাইটের মূল কোডগুলো একসাথে এরকম হবেঃ

```
from django.conf.urls import url
from django.contrib import admin

from myapp.views import index

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^myview/', index),
]
```

> **এক নজরেঃ** জ্যাঙ্গোতে কোন ব্রাউজার থেকে রিকুয়েস্ট আসলে জ্যাঙ্গো যেভাবে তা হ্যান্ডেল করেঃ ১) রিকুয়েস্ট আসার পর জ্যাঙ্গো তার মেইন ইউআরএল কনফিগারেশন সেটিংস লোড করে, অর্থাৎ urls.py ফাইল লোড করে। ২) রিকুয়েস্ট করা ইউআরএল টিকে urls.py এর urlpatterns লিস্টে থাকা ম্যাপারগুলোর সাথে সিরিয়ালে একটা একটা করে চেক করে দেখে কোনটা মিলে কিনা, মিললে সেই ম্যাপার সংশ্লিষ্ট ভিউকে কল করে। ২) ভিউটি ইউআরএল দেখে সে অনুযায়ী জিনিস পত্র তৈরি কর সেটা রেসপন্স হিসেবে ব্রাউজারকে পাঠিয়ে দেয়!

ইউআরএল কনফিগারেশন সঠিক ভাবে সম্পন্ন হল কিনা সেটা চেক করে দেখা দরকার! ডেভ সার্ভার চালু করুনঃ

```
python manage.py runserver
```

অতঃপর ব্রাউজারে ইউ ইউআরএল লিখে এন্টার চাপুনঃ <http://127.0.0.1:8000/myview> যদি Hello World! লেখাটি দেখা যায় তাহলে আপনি সফল, না দেখা গেলে চ্যাপ্টারটি পুনরায় পরুন এবং আবার চেষ্টা করুন!!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://django.howtocode.dev/introduction_to_url_configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
