درک الگوهای URL جنگو

الگوهای نشانی اینترنتی جنگو، نماها را به آدرس های وب خاص نگاشت می کنند. در عمل، آنها کاربران را قادر می سازند تا با استفاده از URL های مربوطه خود به محتوای مختلف دسترسی داشته باشند. در همین حال، الگوهای URL به توسعه‌دهندگان کمک می‌کنند تا درخواست‌های مختلف HTTP را کارآمدتر مدیریت کنند، زیرا می‌توانید به راحتی مسیر را تعیین کنید.

در این آموزش، ما همه چیز را در مورد الگوهای URL جنگو توضیح خواهیم داد، از جمله روش ساخت آن با استفاده از عبارات منظم یا مبدل های مسیر.

الگوهای URL جنگو چیست؟

الگوهای URL جنگو یک نما را به یک آدرس خاص هدایت می کند که کاربران می توانند از آن برای مشاهده محتوا استفاده کنند. آنها برای اطمینان از اینکه نماهای جنگو دارای URL متناظر هستند ضروری هستند، بنابراین وقتی شما host پروژه جنگو شما روی یک سرور، در دسترس است و خطای 404 را برنمی‌گرداند.

بیایید یک مثال واقعی را در نظر بگیریم تا روش کار آنها را نشان دهیم. شما یک نمای دارید که محتوای خود را ارائه می دهد در مورد page. تا از طریق آن قابل دسترسی باشد domain.tld/about، یک الگوی URL ایجاد کنید که نمای را به آن مسیریابی کند /درباره.

الگوی URL را در داخل تنظیم کنید آدرس های اینترنتیpy، که در همان پوشه جنگو شما قرار دارد دیدگاه هاpy. این فایل مشخص می کند که کدام تابع در آن قرار دارد دیدگاه هاpy زمانی فعال می شود که کاربر درخواست های HTTP را از طریق URL مشخص شده ارسال کند.

اگر می‌خواهید درباره استفاده و مدیریت نماها بیشتر بدانید، مقاله نماهای جنگو ما را بررسی کنید.

نشانی‌های اینترنتی در سطح پروژه در مقابل آدرس‌های سطح برنامه

یک پروژه جنگو پیچیده ممکن است از چندین برنامه کوچکتر تشکیل شده باشد. برای سازماندهی بهتر، می توانید الگوهای URL ایجاد کنید روی سطح پروژه یا برنامه

آدرس های اینترنتی در سطح پروژه

آدرس‌های اینترنتی در سطح پروژه درخواست‌ها را مسیریابی می‌کنند روی یک دامنه وسیع تر، مانند نماها برای مدیر page یا بین برنامه ها می توانید آنها را در آن تعریف کنید آدرس های اینترنتیpy داخل پروژه شما root دایرکتوری کنار تنظیماتpy.

به عنوان مثال، اگر وب سایت شما دارای یک وبلاگ و برنامه فروشگاهی کوچکتر است، URL های سطح پروژه شما ممکن است شامل شوند /admin، / وبلاگ، و /فروشگاه.

URL های سطح برنامه

آدرس‌های اینترنتی در سطح برنامه، نماها را در همان برنامه هدایت می‌کنند. به عنوان مثال، اگر وب سایت شما دارای یک بخش وبلاگ باشد، ممکن است URL ها شامل آن شوند /blog/post-id، /blog/archive، یا /blog/author-id.

برای تعریف URL های سطح برنامه، استفاده کنید آدرس های اینترنتیpy داخل پوشه برنامه شما به عنوان مثال، URL های مرتبط با وبلاگ را در آن مشخص کنید پروژه من / وبلاگ /.

پیکربندی URL اصلی

برای نگاشت یک الگوی URL به یک نما، استفاده کنید الگوهای url و آدرس را با استفاده از مسیر() عملکرد در آدرس های اینترنتیpy فایل قبل از انجام این کار، import را مسیر ماژول و شما دیدگاه ها مانند:

from django.urls import path, include
from . import views 

اکنون می‌توانید با استفاده از نحو زیر یک URL را نگاشت کنید:

urlpatterns = [ 
   path('url-name/', views.view_name, name="url_name"),
]

این ‘url-name/’، views.view_name بخش یک URL را به یک تابع خاص در نماهای شما ترسیم می کند. به صورت اختیاری، می‌توانید این الگوی URL را با تغییر « نامگذاری کنید.url_nameکه در ادامه بیشتر توضیح خواهیم داد.

به عنوان مثال، اگر می خواهید یک الگوی URL در سطح پروژه برای خود ایجاد کنید /آرشیو و / سلب مسئولیت در صفحات، کد ممکن است به صورت زیر باشد:

from django.urls import path, include
from . import views 

urlpatterns = [ 
   path('archive', views.archive,),
   path('disclaimer', views.disclaimer,),
]

مسیریابی URL با نماها

پس از تنظیم الگوهای URL، توابعی را ایجاد کنید که با دریافت درخواست های کاربر اجرا می شوند. آنها را به برنامه خود اضافه کنید دیدگاه هاpy فایل

پیشنهاد می‌کنیم بخوانید:  روش نصب LAMP روی اوبونتو 23.04 در 3 مرحله

شما می توانید توابعی را برای دادن پاسخ های مختلف تعریف کنید، اما برای این آموزش، ما به شما نشان خواهیم داد که چگونه یک مورد خاص را ارائه کنید. page قالب با وارد کردن شروع کنید ارائه دهد ماژول

from django.shortcuts import render

سپس، توابع خود را مانند این اضافه کنید:

def archive(request):
    return render(request, 'archive.html')

def disclaimer(request):
    return render(request, 'disclaimer.html')

در این کد دو تابع تعریف می کنیم: بایگانی و سلب مسئولیت. هر دو استفاده می کنند درخواست کنید اعتراض به process درخواست های HTTP کاربران و برگرداندن آن ارائه دهد عملکردی برای نمایش محتوا از قالب های جنگو.

مبتنی بر روی الگوهای URL تعریف شده در کد بخش قبل، دسترسی به domain.tld/archive ارائه خواهد شد archive.html، در حالی که domain.tld/سلب مسئولیت محتوای آن را نشان خواهد داد سلب مسئولیت.html.

الگوها و پارامترهای URL پویا

به جای تنظیم الگوهای URL برای همه صفحات، می توانید یک آدرس پویا ایجاد کنید که به طور خودکار تغییر می کند روی متغیرهای خاص

برای انجام این کار، باید از آن عکس بگیرید پارامترهای URL – مقادیری در آدرس وب که بسته به آن تغییر می کند روی محتوایی که کاربر به آن دسترسی دارد. به عنوان مثال، پست‌های یک وبلاگ از شناسه‌های مختلف در URL خود استفاده می‌کنند.

شما می توانید مقادیر پویا را با استفاده از عبارات منظم و مبدل های مسیر دریافت کنید. با این حال، جنگو مدرن مبدل های مسیر را توصیه می کند زیرا عبارات منظم بیشتر مستعد خطا هستند. تفاوت آنها را در بخش بعدی توضیح خواهیم داد.

مرحله نگاشت یک الگوی URL پویا مانند مرحله استاتیک است. تفاوت این است که شما مبدل های مسیر را به قسمت URL اضافه می کنید که مقدار آن را تغییر می دهد. در اینجا تعدادی از پرکاربردترین آنها آورده شده است.

عدد صحیح یا int:

مبدل مسیر صحیح اعداد را از URL می گیرد، که برای نگاشت آدرس ها به صفحاتی مانند شناسه پست مفید است. کد به شکل زیر است:

path('article/<int:id>/', views.article_detail)

مثال با URL هایی مانند مطابقت دارد مقاله/10 یا ماده/324.

رشته یا str:

مبدل رشته، دنباله ای از هر کاراکتر را می گیرد، به استثنای فضای خالی و اسلش رو به جلو (/) جدا کننده. در اینجا یک مثال کد است:

path('user/<str:username>/', views.user_profile)

این الگو با URL های مشابه مطابقت دارد کاربر/hostinger یا user/vpsisfun.

راب یا راب:

مبدل‌های اسلاگ پیوندهای ثابت پست‌ها را می‌گیرند، که رشته‌هایی از حروف کوچک هستند که با خط فاصله یا زیرخط از هم جدا شده‌اند. کد به شکل زیر است:

path('post/<slug:slug>/', views.blog_post)

مثال بالا با URL هایی مانند کاربر/پیوند دائمی یا user/first_post.

UUID یا uuid:

مبدل UUID یک رشته شناسه منحصر به فرد جهانی (UUID) متشکل از مقادیر هگزا دسیمال 32 کاراکتری را می گیرد. در اینجا یک مثال است:

path('order/<uuid:id>/', views.order_detail)

کد با URL های مشابه مطابقت دارد /order/123e4567-e89b-12d3-a456-426614174000/. این مبدل برای نگاشت شناسه های تولید شده به صورت خودکار مانند فاکتورها یا شماره های سفارش مفید است.

مسیر یا مسیر:

استفاده کنید مسیر: برای گرفتن رشته های متشکل از کاراکترها، از جمله اسلش رو به جلو (/) جدا کننده. کد به شکل زیر است:

path('files/<path:file_path>/', views.file_detail)

در مثال، الگو با URL هایی مانند مطابقت دارد files/images/logo.png.

مبدل های متعدد

می توانید مبدل های مسیر را در یک الگوی URL ترکیب کنید تا چندین مقدار پویا را بگیرید. در اینجا یک مثال است:

urlpatterns = [
    path('product/<slug:category>/<int:id>/', views.product_detail),
]

قطعه کد دو پارامتر را ثبت می کند – Slug که دسته محصول است و ID به صورت عدد صحیح. به این معنی است که الگو با URL های مشابه مطابقت دارد محصول/کفش-صندل/23.

الگوهای URL نامگذاری شده

می‌توانید الگوهای URL خود را نام‌گذاری کنید تا بدون نیاز به بازنویسی آدرس کامل از ابتدا، استفاده مجدد از آن آسان‌تر شود. علاوه بر بهبود قابلیت نگهداری کد، انجام این کار به به حداقل رساندن مشکلات کمک می کند.

اگر الگوهای URL خود را در چندین فایل مانند الگوها و نماها کدگذاری می‌کنید، باید آنها را به صورت جداگانه تغییر دهید. برعکس، شما فقط باید الگوهای نامگذاری شده را به روز کنید روی شما آدرس های اینترنتیpy، که کمتر در معرض خطای انسانی است.

به عنوان مثال، ما یک الگوی URL به نام ایجاد خواهیم کرد ارسال شده است:

patternsurl=[
    path('post/<int:id>/', views.postid, name="postid"),
]

برای تولید الگوی URL بر اساس روی از نام آن استفاده کنید reverse() function این نام را قادر می‌سازد تا مقادیر پویا را که مبدل‌های مسیر نشان می‌دهند، حل کرده و شامل شود. شما دیدگاه ها کد ممکن است شبیه به این باشد:

from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from .models import Post  # if you have a Post model

def postid(request, id):
    post = get_object_or_404(Post, id=id)
    post_url = reverse('postid', kwargs={'id': post.id})
    return render(request, 'post_detail.html', {'post': post, 'post_url': post_url})

این معکوس() تابع URL نامگذاری شده را فراخوانی می کند پست شد، که قبلا در آن قرار دادیم آدرس های اینترنتیpy. سپس، کوارگ ها مقدار شناسه پست فعلی را می‌کشد و آن را به متغیرهای مبدل مسیر ارسال می‌کند.

پیشنهاد می‌کنیم بخوانید:  آیکون های منوی وردپرس: 2 روش روی اضافه کردن آیکون ها به منو برای ناوبری آسان

وقتی الگوی URL را داشتیم، رندر () تابع محتوا را پردازش می‌کند و محتوا را تولید می‌کند post_detail.html قالب به کاربران

عبارات منظم در مقابل مبدل های مسیر

جنگو از عبارات منظم (regex) برای ایجاد متغیرهایی برای پارامترهای URL پویا استفاده کرد. با این حال، مبدل های مسیر را به عنوان جایگزین در نسخه های جدیدتر معرفی می کند.

Regex از رشته ای از کاراکترهای مرتب شده در یک نحو خاص برای مطابقت با الگوی داده استفاده می کند. به عنوان مثال، شما می توانید یک ایجاد کنید پست / شناسه الگوی URL با استفاده از این مبدل مسیر:

'post/<int:id>/'

با این حال، الگوی شما ممکن است با استفاده از regex به شکل زیر باشد:

r'^post/(?P<id>\d+)/

در اینجا مقایسه بین مبدل های regex و مسیر از چندین جنبه است:

  • انعطاف پذیری. Regex نسبت به مبدل‌های مسیر انعطاف‌پذیرتر است زیرا نحو آن امکان ترکیب کاراکترها و تطبیق الگوی بیشتری را فراهم می‌کند.
  • سهولت استفاده. مبدل‌های مسیر کوتاه‌تر و از پیش تعیین شده‌اند و استفاده از آن‌ها را راحت‌تر از regex می‌کنند.
  • رسیدگی به خطا. از آنجایی که خواندن و نوشتن مبدل های مسیر آسان تر است، نگهداری از آنها ساده تر از regex است.
  • عملکرد. نحو Regex می تواند پیچیده باشد و الگو را با هم تطبیق دهد process کندتر

نتیجه گیری

در جنگو، الگوهای URL نماها را به یک آدرس وب خاص نگاشت می کنند، که کاربران می توانند از آن برای دسترسی به محتوای خاص استفاده کنند. برای مثال می توانید تنظیم کنید domain.tld/blog/ برای ارائه وبلاگ page از وب سایت شما

می توانید الگوهای URL را تنظیم کنید روی سطح پروژه یا برنامه آن ها روی نقشه سطح پروژه صفحات مرکزی و اصلی مانند /admin. در همین حال، آنهایی که در سطح برنامه هستند، نماها را در همان برنامه‌ها، مانند پست‌های مختلف در داخل مسیریابی می‌کنند. / وبلاگ.

برای ایجاد یک الگوی URL، آدرس و نماهایی را که می خواهید به آن متصل کنید، اضافه کنید مسیر() عملکرد از آدرس های اینترنتیpy. سپس، در دیدگاه هاpy، عملکردهایی را تعریف کنید که هنگام دسترسی کاربران به URL، که می تواند یک الگو را ارائه کند یا پیامی را بازگرداند، فعال شود.

بخشی از الگوی URL شما می تواند با استفاده از مبدل های مسیر به صورت پویا تغییر کند، که برای نقشه برداری صفحات با شناسه های مختلف مفید است. همچنین می‌توانید الگوهای URL خود را نام‌گذاری کنید و آنها را در نماهای خود معکوس کنید تا قابلیت نگهداری را بهبود ببخشید.

پرسش و پاسخ الگوی URL جنگو

چگونه یک الگوی URL در جنگو ایجاد کنم؟

برای ایجاد یک الگوی URL در جنگو، a را ایجاد کنید آدرس های اینترنتیpy فایل در پوشه های پروژه یا برنامه شما. سپس، import دیدگاه ها و ضربه زدنماژول h. الگوهای URL خود را در داخل فهرست کنید الگوسورل، هر کدام با این دستور تابع مسیر: مسیر (‘url-name/’, views.view_name, name=’url_name’).

چگونه می توانم چندین الگوی URL را اضافه کنم؟

برای گنجاندن چندین الگوی URL، به سادگی آنها را در داخل خود فهرست کنید آدرس های اینترنتیpy فایل الگوسورل، با استفاده از کاما از هم جدا می شوند. توجه داشته باشید که هر الگو باید از مسیر() تابع اگر از چندین الگو استفاده می کنید، توصیه می کنیم آنها را برای قابلیت استفاده مجدد نام گذاری کنید.

چگونه می توانم URL را در جنگو معکوس کنم؟

برای معکوس کردن یک الگوی URL با نام، از معکوس() عملکرد در دیدگاه های شما اگر از پارامترهای URL برای بارگذاری پویا مقادیر استفاده می کنید، اضافه کنید کوارگ ها برای کشیدن داده ها و ارسال آن به مکان نگهدار.