Ş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),
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.
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:
Bu sayfanın tasarımı bile harika..
Hiç yorum yok:
Yorum Gönder