Django Sayfa Yönlendirme

21.04.2025
31

Python tabanlı ve Django kullanılarak hazırlanan bir web sitesinde sayfalar arası geçiş, yönlendirme ve navigasyon işlemleri nasıl yapılır? Oldukça kullanışlı Django Kütüphanesi ile kolayca sayfalara yönlendirme yapabilirsiniz. Dinamik ve Statik olarak iki farklı yöntem ile Django sayfa yönlendirme işlemini yapabilirsiniz.

Django Sayfa Yönlendirme

Django Sayfa Yönlendirme metodlarını kullanarak çok hızlı ve optimize bir şekilde Python ile hazırlanan web sayfaları arasında geçiş sağlayabilirsiniz. Bunun için ihtiyacınız olan biraz Python bilgisi ve biraz da Django kütüphanesine hakim olmaktır.

Django için GitHub Proje Linki:
https://github.com/omersahintr/WebApps

Eğer göz atmak isterseniz buraya Django Kütüphanesinin kurulumu ve başlangıç ayarları ile ilgili sayfamızın bir linkini bırakıyorum.

Django Yönlendirme Çeşitleri

Statik Django Sayfa Yönlendirmeleri

Şimdi birden fazla site içi sayfa yönlendirmeleri Django’da nasıl yapılır kısaca değinmeye çalışalım.

  1. Cisco Course
  2. Python Course

şeklinde iki kurs bulunsun sitemizde. Bu senaryoya göre her iki kurs için de dinamik Url yönlendirmesi yapalım. Proje/views.py dosyasını açalım ve aşağıdaki satırları ekleyelim.

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("First Django Project Test OK.")

def cisco_course(request):
    return HttpResponse("Network Cisco Course")

def python_course(request):
    return HttpResponse("Python Course")
Project/views.py

bu tanımlamalardan sonra uygulama altında bulunan urls.py içinde değişiklik yapalım.

from django.urls import path
from . import views

urlpatterns = [
    path("",views.index, name="index"), ## url:index 
    ##path("contacts",views.index, name="index") ## url:/contacts

    path("cisco/", views.cisco_course, name="cisco"),
    path("python/", views.python_course, name="Python")
    
]
App/urls.py

Sonrasında ” python manage.py runserver 8080” komutunu Terminal’de çalıştırarak sunucuyu aktif hale getirelim. Web browser’da http://127.0.0.1:8080/chat_message_app/python/ yazalım ve çalıştıralım.

Ekran Çıktısı:

Aynı şekilde http://127.0.0.1:8080/chat_message_app/cisco/ yazdığımızda Django Sayfa Yönlendirme işlemi çalışır ve şu sonucu üretir;

ekranlarını göreceksiniz.

Python Django ile Dinamik Yönlendirme

Bir sözlük, Json veya data file’dan sayfa verileri bulunsun. Bunları Django’da dinamik olarak tek satırda projeye nasıl ekleyebiliriz?

Öncelikle bir Dictionary tanımlayarak işe başlayalım. Bu dict içindeki sayfa verilerini sırasıyla tek satırda tanımlayarak dinamik yönlendirme ile karmaşanın önüne geçelim.

from django.shortcuts import render
from django.http import HttpResponse

course_dict = {
    "python":"Welcome to Python Course",
    "cisco":"Welcome to Cisco Course",
    "java":"Java Course",
    "charp":"C# Course",
    "swift":"Swift Course"
}

def index(request):
    return HttpResponse("First Django Project Test OK.")


def course(request, userurl): #user_url: user browser written url.
    return HttpResponse(course_dict.get(userurl,"Page is Not Found - 404"))
Project/views.py

urls.py tarafında bir parametre ile url sonuna yazılacak olan sayfa adını almamız lazım. Bunun için path tanımlarken “<str:user_url>/” içinde alınacak parametre ve veri tipini belirleyebiliriz. Buradaki user_url ile views’ta parametre için verdiğini isim aynı olursa karışıklığın önüne geçmiş olursunuz.

from django.urls import path
from . import views

urlpatterns = [
    path("",views.index, name="index"), ## url:index
    path("<str:userurl>/", views.course, name="course")
    
]
App/urls.py

Ekran Çıktıları:

Çoklu Integer Türünde Parametre Çekme İşlemi

Browser adres satırından birden fazla integer tipinde veriyi Django ile çekerek bu sayılarla matematiksel üs alma işlemi yaptırıp ekrana yazdıralım. Url’nin sonuna yazılacak olan ilk sayıya n1 ve ikinci sayıya n2 diyelim. Bu işlemi views.py dosyasında gerçekleştirelim:

from django.shortcuts import render
from django.http import HttpResponse


def pow_view(request,n1,n2):
    return HttpResponse(f"{n1}^{n2}={pow(n1,n2)}")
Project/views.py

app/urls.py dosyasında:

from django.urls import path
from . import views

urlpatterns = [
    path("",views.index, name="index"), ## url:indlocalhost/app/
    path("<int:n1>/<int:n2>/",views.pow_view,name="pow") ## url:localhost/app/2/8/
    
]
App/urls.py

Ekran Çıktısı:

Django ile 404 Sayfa Bulunamadı Hatası Yönetimi

Django Sayfa Yönlendirme işlemleri arasında en önemli özelliklerden biri de hata sayfalarının yönetimidir. Yani kullanıcının adres satırından yazacağı yanlış bir url için 404-Sayfa Bulunamadı sayfasına yönlendirme ve hatta bu hata sayfasının tasarımına biraz göz atacağız.

Bunun çok kolay bir yolu var ama öncesinde Http404 alt kütüphanesini views.py dosyasına eklememiz gerekiyor.

from django.shortcuts import render
from django.http import HttpResponse, Http404


def course(request,userurl):
    try:
        course = course_dict[userurl]
        return HttpResponse(course)
    except:
        raise Http404("404 - This page is not found!")
Project/views.py

App/urls.py dosyasına ise;

from django.urls import path
from . import views

urlpatterns = [
    path("",views.index, name="index"), ## url:indlocalhost/app/
    path("<str:userurl>/", views.course, name="course") ## url:localhost/app/cisco/
    
]
App/urls.py

Ekran Çıktısı:

Django Debug Mod Açma ve Kapama

Yukarıdaki resimde görülen kırmızı çerçeve içerisinde bizim belirlediğimiz hata mesajı görülüyor. Bu sayfayı sadece tasarımcı ve yazılımcının görebilmesi için detaylı “debug” modunda gösterilmektedir.

Geliştirme sona erdiğinde Project/settings.py dosyasında yapılacak bir değişiklik ile gösterimi kapatılabilir.

Debug Mod Aktif Etme İşlemi

Settings.py dosyasının 20-30 satırları arasında yer alan “DEBUG=True” parametresinde yapılacak değişiklik ile detaylı Django hata sayfası gösterimi açılıp kapatılabilir.

django sayfa yönlendirme

Debug Mod Kapatma İşlemi

Debug=False olarak ayarlarsanız hata sayfalarındaki detay bilgileri kullanıcılardan gizlenmiş olur. Ancak bunu yaptığınızda hemen bir alt satırda bulunan ALLOWED_HOSTS yani izin verilen host’lar bölümüne ALLOWED_HOSTS = [“localhost”] veya ALLOWED_HOSTS = [“127.0.0.1”] şeklinde string değer atamanız gerekir.

Debug modu False edip kapattıktan ve Allowed Hosts yani izin verilen host’ları “localhost” olarak belirledikten sonra 127.0.0.1 yazarsanız sunucu Bad Request (400) şeklinde hata sayfası döndürecektir.

Sunucu adına browser’dan localhost yazdığınızda ise eğer olmayan bir sayfayı çağırırsanız aşağıdaki gibi daha basit bir hata sayfası gösterilecektir.

Bu hata sayfasının tasarımını da değiştirebiliriz. Bunun için views.py dosyasında Try-Except bloğunda except’in altına bir return satırı ekleyeceğiz. Ayrıca bu işlemi yapmadan önce HttpResponseNotFound modülünü projeye dahil etmek gerekecektir.

Proje/views.py :

from django.shortcuts import render
from django.http import HttpResponse, Http404, HttpResponseNotFound


def course(request,userurl):
    try:
        course = course_dict[userurl]
        return HttpResponse(course)
    except:
        return HttpResponseNotFound("404-Not Found Error!!!")
Project/views.py

dosyayı kaydedip sayfayı yenilediğimizde bulunamayan sayfa için şu şekilde bir hata sayfası gösterilecektir:

Kalıcı Bağlantı Yönlendirme (Redirect) İşlemi

Yayından kaldırılacak olan bir sayfanın url yönlendirmesini farklı bir sayfaya yapmak için yada ID kullanımı ile site içi linklerin oluşturulması amacıyla Django’da Redirection işlemi yapmamız gerekebilir. Bunun için HttpResponseRedirect modülünü kullanacağız.

from django.shortcuts import render
from django.http import HttpResponse, Http404, HttpResponseNotFound, HttpResponseRedirect

course_dict = {
    "python":"Welcome to Python Course",
    "cisco":"Welcome to Cisco Course",
    "java":"Java Course",
    "charp":"C# Course",
    "swift":"Swift Course"
}
    
def course_select(request,n1): ##localhost/1/ --> localhost/swift/
    if n1 == 1:
        return HttpResponseRedirect("swift")
    else:
        return HttpResponseNotFound("This page not found!")
Project/views.py

App/urls.py :

from django.urls import path
from . import views

urlpatterns = [

    path("<int:n1>",views.course_select,name="course_select")
    
]
App/urls.py

Sonuç olarak browser’dan localhost/app/1/ sayfamızı çağırdığımızda otomatik olarak Http-301 kalıcı bağlantı yönlendirme ile localhost/app/swift/ sayfasına yönlenecektir;

Bu yöntem çok fazla kullanılmaz, aralardaki kaçış sekmelerinde lokal bazlı ve geçici olarak kullanılabilir. Bunun yerine “name” parametrelerini kullancağımız Reversing metodu tercih edilir.

Django Bağlantı Reversing İşlemi

urls.py sayfasında tanımladığımız name parametrelerini kullanarak daha kullanışlı bir sayfa yönlendirme işlemi yapabiliriz. Bunun için views.py içerisine “from django.urls import reverse” modülünü eklememiz gerekiyor.

from django.urls import path
from . import views

urlpatterns = [
    
    path("",views.index, name="index"), ## url:indlocalhost/app/
    path("<int:n1>",views.course_select,name="course_select"),
    path("<str:userurl>/", views.course, name="course"), ## url:localhost/app/cisco/
    
]
App/urls.py

Project/views.py :

from django.shortcuts import render
from django.http import HttpResponse, Http404, HttpResponseNotFound, HttpResponseRedirect
from django.urls import reverse

course_dict = {
    "python":"Welcome to Python Course",
    "cisco":"Welcome to Cisco Course",
    "java":"Java Course",
    "charp":"C# Course",
    "swift":"Swift Course"
}

    
def course_select(request,n1): ##localhost/1/ --> localhost/cisco/
    course_list = list(course_dict.keys()) ##get dictionary id's
    try:
        course = course_list[n1]
        page = reverse("course", args=[course]) ##select urls.py paths name parameters
        
        return HttpResponseRedirect(page)
    except:
        raise Http404("404 - This page is not found!")
Project/views.py

Web browser’da localhost/app/0/ yazdığımızda sayfamız otomatik olarak python kursunun sayfasına yönlenecektir:

Django’da en profesyonel bağlantı yönlendirme şekli bu yöntemdir. Name parametreleri bu nedenle önemli hale geldi.

ZİYARETÇİ YORUMLARI - 0 YORUM

Henüz yorum yapılmamış.

Bu web sitesi, bilgisayarınıza bilgi depolamak amacıyla bazı tanımlama bilgilerini kullanabilir.
Bu bilgilerin bir kısmı sitenin çalışmasında esas rolü üstlenirken bir kısmı ise kullanıcı deneyimlerinin iyileştirilmesine ve geliştirilmesine yardımcı olur.
Sitemize ilk girişinizde vermiş olduğunuz çerez onayı ile bu tanımlama bilgilerinin yerleştirilmesine izin vermiş olursunuz.
Çerez bilgilerinizi güncellemek için ekranın sol alt köşesinde bulunan mavi kurabiye logosuna tıklamanız yeterli. Kişisel Verilerin Korunması,
Gizlilik Politikası ve Çerez (Cookie) Kullanımı İlkeleri hakkında detaylı bilgi için KVKK&GDPR sayfamızı inceleyiniz.
| omersahin.com.tr |
Copyright | 2007-2025