بخش های اصلی

آموزش Django

Django – تغییر مسیر صفحه

در برنامه‌های وب به دلایل زیادی نیاز به تغییر مسیر صفحه هست. ممکنه بخواین هنگامی که عمل خاصی اتفاق میفته خصوصاً در مواقعی که خطا رخ میده، کاربر را به صفحه‌ی دیگه‌ای هدایت کنین. برای مثال، وقتی به وب‌سایت login می‌کنه، معمولاً به صفحه‌ی اصلی یا به داشبورد اختصاصی خودش هدایت میشه. در Django تغییر مسیر با استفاده از متدِ ‘redirect’ انجام میشه.

متدِ ‘redirect’ یک آرگومان میگیره : URLای که می‌خواین به آن تغییر مسیر بدین که بعنوان رشته‌ی A که نام view است مقداردهی میشه.

myapp/views باید شبیه به کد زیر باشه :

def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
	
def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return HttpResponse(text)
	
def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

در ادامه viewیِ hello را طوری تغییر میدیم تا به djangoproject.com تغییر مسیر بده. Viewیِ viewArticle را هم تغییر می‌دیم تا به '/myapp/articles' داخلی، تغییر مسیر بده. برای انجام این‌کار باید myapp/view.py را بصورت زیر تغییر بدین :

from django.shortcuts import render, redirect
from django.http import HttpResponse
import datetime

# Create your views here.
def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return redirect("https://www.djangoproject.com")
	
def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")
	
def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

در مثال بالا، ابتدا redirect را از django.shortcuts، import کرده‌ایم و برای redirect شدن به وب‌سایت اختصاصیِ Django فقط URL کامل را به بصورت یک رشته به متدِ ‘redirect’ پاس داده‌ایم و در مثال دوم (viewای با نامِ viewArticle) متدِ ‘redirect’، نامِ view و پارامترهای آن را بعنوان آرگومان گرفته.

با رفتن به /myapp/hello، خروجی به صورت زیر خواهید دید:

django page redirection example1

و با رفتن به /myapp/article/42، خروجی بصورت زیر خواهید دید –

django page redirection example2

همچنین می‌توانید با اضافه کردنِ پارامترِ permanent = True، ‘redirect’ را بصورت موقتی یا دائمی تعریف کنین. کاربر هیچ تفاوتی میان این دو نخواهد دید ولی موتورهای جستجو چنین جزئیاتی را هنگام رتبه‌دهی به وب‌سایت به حساب کاربری اضافه می‌کنن.

پارامترِ ‘name’ را که هنگامِ map کردنِ URLها در url.py تعریف کردیم را به یاد بیارین –

url(r'^articles/(?Pd{2})/(?Pd{4})/', 'viewArticles', name = 'articles'),

نام (در این مثال = article) در متدِ ‘redirect’ بعنوان یک آرگومان قابل استفاده‌ست، بنابراین تغییر مسیرِ  viewArticle که بصورت زیر است:

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")

تغییر میکنه و بصورت زیر درمیاد:

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(articles, year = "2045", month = "02")

نکته – تابعی نیز برای ایجادِ URLها وجود داره؛ این تابع به روشی که redirect استفاده شده، استفاده میشه؛ متدِ ‘reverse’ (django.core.urlresolvers.reverse) . این تابع یک شیءِ HttpResponseRedirect برنمی‌گرداند بلکه یک رشته‌ی معمولی را برمی‌گرداند که شامل URL مربوط به view است و با هر آرگومان پاس داده شده‌ای کامپایل میشه.

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش Django

Learn Django

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد