آموزش تعریف و مدیریت مسیرها در Django (فایل urls.py) با مثال واقعی

مقدمه

در جنگو (Django)، فایل urls.py یکی از مهم‌ترین بخش‌های هر پروژه است. وظیفه‌ی این فایل، مدیریت مسیرها (URL Routing) است — یعنی مشخص می‌کند هر آدرس در سایت شما به کدام View متصل شود. در این مقاله‌ی جامع، قصد داریم آموزش تعریف و مدیریت مسیرها در Django (فایل urls.py) را با زبانی ساده ولی فنی بررسی کنیم و به همراه مثال‌های واقعی، نحوه‌ی تعریف مسیرهای ساده، داینامیک و استفاده از include و namespace را یاد بگیریمآنچه در این مقاله می‌خوانید


 urls.py چیست و چه کاربردی دارد؟

هر پروژه جنگو دارای یک فایل به نام urls.py است که نقش «نقشه‌ی سایت» را دارد. این فایل تعیین می‌کند هر آدرس اینترنتی (URL) در پروژه به کدام View مربوط می‌شود.

برای مثال، وقتی کاربر وارد آدرس /about/ می‌شود، جنگو بررسی می‌کند آیا در فایل urls.py مسیری با این نام تعریف شده است یا خیر.

 ساختار فایل urls.py در Django

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('about/', views.about, name='about'),
]

🔹 در اینجا:

  • urlpatterns یک لیست از مسیرهاست.
  • تابع path() برای تعریف مسیر جدید استفاده می‌شود.
  • آرگومان اول مسیر (مانند 'about/') و آرگومان دوم View مربوطه است.

 تابع path و نحوه استفاده از آن

path('آدرس/', view, name='نام‌اختیاری')

مثلاً:

path('contact/', views.contact, name='contact')

 پارامترها:

  • آدرس (route): رشته‌ای که مسیر URL را مشخص می‌کند.
  • view: تابع یا کلاس ویو که هنگام دسترسی به URL اجرا می‌شود.
  • name: برای ارجاع به مسیر در Template یا Redirect استفاده می‌شود.

 تعریف مسیرهای داینامیک (Dynamic URL)

path('product/<int:id>/', views.product_detail, name='product_detail')

در این حالت اگر کاربر به /product/5/ برود، مقدار id = 5 به تابع ویو ارسال می‌شود.

نوع توضیح
<int:variable> عدد صحیح
<str:variable> رشته
<slug:variable> برای URL‌های خوانا مثل product/samsung-galaxy-s23/
<uuid:variable> شناسه‌های منحصربه‌فرد

 استفاده از include برای سازماندهی بهتر مسیرها

وقتی پروژه بزرگ می‌شود، بهتر است هر اپلیکیشن فایل urls.py خودش را داشته باشد. برای این کار از تابع include() استفاده می‌کنیم.

 ساختار پروژه:

myproject/
 ├── myapp/
 │    ├── urls.py
 │    ├── views.py
 └── myproject/
      └── urls.py

در فایل اصلی پروژه (myproject/urls.py):

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]

در فایل myapp/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('about/', views.about, name='about'),
]

 حالا مسیر /about/ به ویوی مربوط در myapp وصل می‌شود.

 نام‌گذاری مسیرها با name

path('contact/', views.contact, name='contact')

در Template:

<a href="{% url 'contact' %}">تماس با ما</a>

در View:

from django.urls import reverse
reverse('contact')  # خروجی: '/contact/'

 استفاده از name باعث می‌شود در صورت تغییر مسیر، نیازی به اصلاح تمام لینک‌ها نباشد.

 کار با namespace در پروژه‌های بزرگ

urlpatterns = [
    path('blog/', include(('blog.urls', 'blog'), namespace='blog')),
]

در Template:

<a href="{% url 'blog:post_detail' post.id %}">مشاهده مطلب</a>

 مثال واقعی از مدیریت مسیرها در Django

views.py:

from django.shortcuts import render

def product_list(request):
    return render(request, 'shop/product_list.html')

def product_detail(request, id):
    return render(request, 'shop/product_detail.html', {'id': id})

urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('products/', views.product_list, name='product_list'),
    path('products/<int:id>/', views.product_detail, name='product_detail'),
]

حالا اگر به آدرس /products/ بروید، لیست محصولات نمایش داده می‌شود و /products/5/ صفحه جزئیات محصول شماره ۵ را نشان می‌دهد.

 جمع‌بندی

در این مقاله یاد گرفتیم که فایل urls.py در جنگو چطور مسیرها را به ویوها متصل می‌کند. با مفاهیم پایه‌ای مانند path(), include(), name و namespace آشنا شدیم و نحوه‌ی تعریف مسیرهای داینامیک را با مثال واقعی بررسی کردیم. مدیریت درست مسیرها، یکی از کلیدهای اصلی ساخت پروژه‌های تمیز و ساختارمند در Django است.

 سؤالات متداول

1. آیا باید برای هر اپلیکیشن فایل urls.py جدا داشته باشیم؟

بله، در پروژه‌های بزرگ این کار توصیه می‌شود تا مسیرها مرتب و قابل نگهداری باشند.

2. فرق بین path و re_path چیست؟

تابع path() برای مسیرهای ساده و خوانا استفاده می‌شود، اما re_path() برای مسیرهایی با عبارات منظم (Regex) کاربرد دارد.

3. آیا می‌توان از مسیرهای تو در تو استفاده کرد؟

بله، با استفاده از include() می‌توانید مسیرهای هر اپ را در مسیر کلی‌تر فراخوانی کنید.

4. namespace چه کاربردی دارد؟

برای جلوگیری از تداخل نام مسیرها بین اپلیکیشن‌ها در پروژه‌های چندبخشی استفاده می‌شود.


مطالب مرتبط

همه چیز درباره قالب‌ها (Templates)  آموزش کامل با مثال‌های واقعی

urls.py in django