درک توابع میان‌بُر جنگو برای توسعه سریع‌تر ویوها

این مقاله توابع میان‌بُر جنگو مانند render()، redirect()، resolve_url()، get_object_or_404() و get_list_or_404() را بررسی می‌کند. این توابع عملیات رایج ویوها مانند رندر قالب، ایجاد ریدایرکت، تبدیل ورودی به URL معتبر و واکشی ایمن آبجکت‌ها را ساده‌تر کرده و کدنویسی را سریع‌تر و خواناتر می‌کنند.

میان‌بر جنگوrenderget_object_or_404

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۲۳ اسفند ۱۴۰۴

مقدمه

ماژول django.shortcuts مجموعه‌ای از توابع کمکی ارائه می‌دهد که چندین لایه از معماری جنگو را در یک عملیات ساده ترکیب می‌کنند. این توابع برای ساده‌سازی کارهای رایج ویوها طراحی شده‌اند و امکان رندر قالب، ریدایرکت، تبدیل ورودی به URL و واکشی ایمن آبجکت‌ها را فراهم می‌کنند.


تابع render()

تابع render() یک قالب را با یک دیکشنری context ترکیب کرده و یک HttpResponse شامل خروجی رندرشده بازمی‌گرداند.


آرگومان‌های ضروری

  • request: شیء درخواست.
  • template_name: مسیر قالب یا لیستی از قالب‌ها.

آرگومان‌های اختیاری

  • context: دیکشنری داده‌های قالب.
  • content_type: نوع MIME.
  • status: کد وضعیت HTTP.
  • using: نام موتور قالب.

نمونه کد

from django.shortcuts import render

def my_view(request):
    return render(
        request,
        "myapp/index.html",
        {"foo": "bar"},
        content_type="application/xhtml+xml",
    )

معادل با:


from django.http import HttpResponse
from django.template import loader

def my_view(request):
    t = loader.get_template("myapp/index.html")
    c = {"foo": "bar"}
    return HttpResponse(t.render(c, request), content_type="application/xhtml+xml")

تابع redirect()

تابع redirect() یک HttpResponseRedirect یا HttpResponsePermanentRedirect برمی‌گرداند.


ورودی‌های قابل قبول

  • یک مدل → فراخوانی get_absolute_url().
  • نام ویو → استفاده از reverse().
  • یک URL کامل یا نسبی → استفاده مستقیم.

کدهای وضعیت

permanentpreserve_requeststatus
TrueFalse301
FalseFalse302
FalseTrue307
TrueTrue308

نمونه‌ها

from django.shortcuts import redirect

def my_view(request):
    obj = MyModel.objects.get(...)
    return redirect(obj)

def my_view(request):
    return redirect("some-view-name", foo="bar")

def my_view(request):
    return redirect("/some/url/")

تابع resolve_url()

تابع resolve_url() ورودی را به یک URL معتبر تبدیل می‌کند. ورودی می‌تواند شامل موارد زیر باشد:


  • آبجکتی با get_absolute_url().
  • نام ویو یا تابع ویو.
  • یک رشته URL.

نمونه

from django.http import JsonResponse
from django.shortcuts import get_object_or_404, resolve_url
from .models import Article

def article_api_view(request, pk):
    article = get_object_or_404(Article, pk=pk)
    return JsonResponse({
        "id": article.pk,
        "title": article.title,
        "url": resolve_url(article),
    })

تابع get_object_or_404()

این تابع تلاش می‌کند یک آبجکت را با get() واکشی کند. اگر آبجکت وجود نداشته باشد، به‌جای DoesNotExist یک Http404 پرتاب می‌کند.


نمونه

from django.shortcuts import get_object_or_404

def my_view(request):
    obj = get_object_or_404(MyModel, pk=1)

معادل با:


from django.http import Http404

def my_view(request):
    try:
        obj = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")

تابع get_list_or_404()

این تابع نتیجه filter() را به لیست تبدیل کرده و اگر لیست خالی باشد، Http404 پرتاب می‌کند.


نمونه

from django.shortcuts import get_list_or_404

def my_view(request):
    my_objects = get_list_or_404(MyModel, published=True)

معادل با:


from django.http import Http404

def my_view(request):
    my_objects = list(MyModel.objects.filter(published=True))
    if not my_objects:
        raise Http404("No MyModel matches the given query.")

جمع‌بندی

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


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

فریم‌ورک Tasks در Django: راهنمای کامل اجرای کارهای پس‌زمینه در Django 6.0

Django 6.0 فریم‌ورک Tasks را معرفی کرده است؛ سیستمی داخلی برای تعریف و صف‌بندی کارهای پس‌زمینه خارج از چرخهٔ request–response. این مقاله نحوهٔ کار Tasks، پیکربندی backendها، تعریف و enqueue کردن Taskها، استفاده از context، و ادغام با سیستم‌های Worker خارجی را توضیح می‌دهد.

ادامه

پشتیبانی Asynchronous در Django: راهنمای کامل Async Views، ORM، Middleware، عملکرد و ایمنی

این مقاله پشتیبانی Django از برنامه‌نویسی غیرهم‌زمان (async) را توضیح می‌دهد. موضوعاتی مانند async views، اجرای Django تحت ASGI، رفتار middleware، قابلیت‌های ORM غیرهم‌زمان، sync_to_async، مدیریت قطع اتصال، نکات عملکردی، و مکانیزم‌های ایمنی Django برای جلوگیری از استفادهٔ ناامن async بررسی می‌شوند.

ادامه

System Check Framework در Django: راهنمای کامل نوشتن، ثبت، اجرا و تست چک‌های سیستمی

System Check Framework در Django مجموعه‌ای از بررسی‌های استاتیک برای تشخیص مشکلات رایج در پروژه است. این مقاله نحوهٔ اجرای چک‌ها، نوشتن چک‌های سفارشی، مدیریت پیام‌ها، برچسب‌گذاری چک‌ها، افزودن چک به مدل‌ها و فیلدها، و نوشتن تست‌های واحد و یکپارچه برای چک‌ها را توضیح می‌دهد.

ادامه

سیگنال‌ها در Django: راهنمای کامل استفاده، اتصال، ارسال و مدیریت Signalها

این مقاله سیستم سیگنال‌های Django را توضیح می‌دهد؛ مکانیزمی برای اطلاع‌رسانی رویدادها بین بخش‌های مختلف برنامه بدون ایجاد وابستگی مستقیم. موضوعاتی مانند نحوهٔ اتصال receiverها، استفاده از decorator، مدیریت senderهای خاص، محل مناسب قرارگیری کد سیگنال‌ها، هشدارهای مهم، و بهترین شیوه‌ها بررسی می‌شوند.

ادامه

آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

ادامه

سریال‌سازی و دسریال‌سازی در Django: راهنمای کامل کار با Serialization Framework

این مقاله سیستم سریال‌سازی Django را توضیح می‌دهد؛ از نحوهٔ تبدیل مدل‌ها به JSON، XML، YAML و JSONL گرفته تا دسریال‌سازی داده‌ها، سریال‌سازی فیلدهای انتخابی، کار با مدل‌های ارث‌بری، مدیریت روابط، و نکات مهم هنگام ذخیرهٔ داده‌های دسریال‌شده.

ادامه