URLها و آدرسی دهی در جنگو

سلام

در این مرحله قصد داریم تا با کلیک روی نام بورد‌ها در صفحۀ اصلی، تاپیک‌های مختلف از آن بورد نمایش داده شود.

برای اینکار باید فایل urls.py از فولدر لیبوگرام را ویرایش کنیم.

Libogram/urls.py

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

from boards import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^boards/(?P<pk>\d+)/$', views.board_topics, name='board_topics'),
    url(r'^admin/', admin.site.urls),
]

(نکتۀ مهم اینکه تغییرات بالا باعث ایجاد خطا در جنگو می شود و عادی است. بنابراین در این مرحله نمی توان پروژه را اجرا کرد.)

بخش URLها یکی از مهمترین مفاهیم در جنگوست. یک برنامه ممکن است از تعداد زیادی URL تشکیل شده باشد که این آدرس‌ها درون فایل urls.py قرار دارند. اما برای شروع باید آدرس همین فایل را هم به جنگو معرفی کنیم. به این فایل root URLconf می گویند و مسیر آن در فایل settings.py قرار دارد.

Libogram/settings.py

ROOT_URLCONF = 'Libogram.urls'

(به صورت پیش فرض این آدرس تنظیم شده و تنها در صورت لزوم نیاز به تغییر دارد.)

زمانی که کاربر یک آدرس را وارد می کند، جنگو به فایل urls.py می‌رود و اولین آدرسی که با آن هم‌خوانی داشته باشد را انتخاب می کند. سپس از روی آدرس و از پارمترهای تابع url به سراغ فایل viewای می رود که به عنوان دومین پارامتر در تابع url تنظیم شده و در صورتی که آدرس را پیدا نکند خطای ۴۰۴ می دهد. ساختار تابع url به این شکل است:

def url(regex, view, kwargs=None, name=None):
# ...

توضیحات:

  • regex: ریجکس یا همان regular expression برای تطبیق الگوهای URL به string است. ضمناً ریجکس‌ها شامل پارامترهای GET یا POST نمی‌شوند. یعنی در آدرس http://127.0.0.1:8000/boards/?page=2 صرفاً بخش مربوط به /boards/ پردازش می شود.
  • view: از این تابع برای تطبیق درخواست‌های کاربر با URLها استفاده می شود. همینطور می شود در آن از توابع conf.urls.include استفاده کرد. از این توابع برای فایل‌های urls.py که در محل دیگری قرار دارند، استفاده می‌شود. (بعداً توضیحات بیشتری ارائه می شود.)
  • Kwargs: برای ارسال ورودی‌ها به ویوی نهایی استفاده می شود. از این مورد برای اختصاصی‌سازیِ ویوهای reusable استفاده می شود که البته معمولاً کاربردی ندارد.
  • Name: یک شناسۀ یکتا برای URLهاست. با این کار به سادگی و صرفاً با تغییر ریجکس می توانیم یک آدرس را در تمام پروژه تغییر دهیم.

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: URLهای ابتدایی و ساده

مطلب قبلی:معرفی Django Admin

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگو شرکت کنید؟
نظری بدهید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *