Django Notları - 2

September 09, 2008 2 minute read

Bir içerik düşünün, bulunduğunuz sayfanın linki ile ilişkilendirilmiş. Çağrılan sayfanın adresine göre, tanımladığınız fonksiyonları kullanmak, o sayfada görüntülemek istiyorsunuz. Peki bunu nasıl yapabiliriz? Önceki örneğimizde, fonksiyonlarımızı nerede tanımlayıp (views.py), adresleri nerede tanımlayacağımızı (urls.py) öğrenmiş olduk. Bu araçları kullanarak, web tarayıcımızda zaman bilgilerini göstermeyi başardık.

Şimdiki örneğimiz ise, dinamik internet sayfalarını nasıl oluşturacağımız ile ilgili. Amacımız basit; adresteki dizin numarasıyla sayfamızdaki saat bilgisini ilişkilendirmek; yani dizin numarası kaçsa, sayfamız da o kadar saat ileriyi gösterecek. İşte, views.py’deki zaman fonksiyonumuz:

def hours_ahead(request, offset):
   offset = int(offset)
   dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
   html = "<html><body>%s saat sonra zaman şöyle olacak: %s.</body></html>" % (offset, dt)
   return HttpResponse(html)

Evet, bu kodu views.py dosyasına aynen yazıyoruz. Fonksiyonun amacı gayet basit. dt isimli değişken, sayfa adresindeki dizin numarası değerini alıyor ve o integer olarak belirlenmiş değeri saat değişkenine ekliyor. Şimdi urls.py‘ye dönelim:

from django.conf.urls.defaults import *
from mysite.views import current_datetime, hours_ahead

urlpatterns = patterns('',
   (r'^time/$', current_datetime),
   (r'^time/artir/(\d{1,2})/$', hours_ahead),
)

mysite dizinindeki views.py dosyasında tanımladığımız current_datetime fonksiyonunu çağırdığımız gibi, hours_ahead‘ı da çağırdık ve urlpatterns‘te, fonksiyonumuzun çalışacağı sayfayı tanımladık. Fakat dikkat edin, sayfa adresimiz tam belli bir sayfayı belirtmiyor:

    (r'^time/artir/(\d{1,2})/$', hours_ahead),

(ekran görüntüsü yok)

Düzenli İfadeler

Son yazdığımız kodda, (\d{1,2}) ifadesinin ne anlama geldiğini söyleyeyim. Bu bir düzenli ifadedir. Yani biz burada “\d” kullanarak değerin sayı olduğunu, {1,2} ile de değerin 1, 2 veya bunların arasında bir değer olduğunu belirtmiş olduk. İnternette “regular expressions programming” şeklinde araştırma yaparsanız, bir çok kaynak bulabilirsiniz.

urls.py’de kullanabileceğiniz belli başlı düzenli ifadeleri bir tabloyla gösterelim:

Editörün notu : Bu bölümü ayırdım. Buradan bulabilirsiniz.

Şimdi örneğimize geri dönelim. urls.py dosyasında belirtmiştik ki, sayfa adresinde 1 ve 2 basamaklı sayılar views.py‘de tanımlanan hours_ahead fonksiyonumuzla ilişkilendirilsin. Fonksiyonun amacı neydi? Sayfa adresinde belirtilen değeri şuanki saate eklemek. Eğer urls.py‘de belirtilen 1 ve 2 basamaklı değerlerin dışında bir sayı girersek ne olur peki? Deneyelim:

(ekran görüntüsü yok)

Bu sayfanın tasarımı bile harika..