Django RSS Feed Ekleme

Django’da RSS Feed ekleme işlemi çok basittir. Uzun uzun anlatabilir miyim diye düşündüm ancak yine de başaramam herhalde. Öncelikle yapılması gerekenleri söylemek gerekiyor sanırım. Uygulamamız içerisine feeds.py dosyasını oluşturalım ( siz isterseniz mahmut.py deyin ) Oluşturma işlemini başarıyla yaptıysanız şimdi bu dosyanın içine sınıf oluşturmalıyız. Bunun için Django’nun Feed Framework‘ünü çağırmak gerekiyor. Bir de slug yani url için de core kütüphanesinde bulunan reverse() işlevini çağıralım.

Bu işlemden sonra da RSS beslemesi olarak alacağımız modeli çağıralım. Benim çalışmamda RSS beslemesi yazdığım blogum için vardı. Blogdaki son yazıları gösterecekti. Post isimli modelimi de yine dahil ediyorum:

from .models import Post

Dahil etme işlemi başladıktan sonra PostFeed adında bir sınıf oluşturup, bu sınıfa daha önce import ettiğim Feed sınıfından miras almasını söylüyorum. Böylece Feed sınıfının özelliklerini kendi PostFeed sınıfımda kullanabileceğim. Kısacası şöyle bir giriş olacak:

Eh madem sınıfa bir giriş yaptık o zaman bu sınıfa dair bazı özellikleri, işlevleri kullanalım. Belirtmem gereken bazı şeyler var.

title değişkeni RSS feed sayfanızda başlığı gösteriyor. Hem h1 tagleri arasında hem de tarayıcı başlığında görünen kısımdır. O zaman sınıfımızı şöyle değerlendirelim:

Tüm işlemler bitince buradaki adımları kaynak kodlara bakıp görebilirsiniz. Neyse devam edelim:

link değişkeni site linkini gösteriyor. Bu link tagleri arasında görünen link. Örneğin http://localhost/link-degiskeni gibi düşünebiliriz. O zaman sınıfımızı biraz daha ilerletelim:

Şimdi geldik en önemli noktaya. Açıklama kısmına. RSS belgelerine göre, RSS sayfaları için bir de açıklama kısmı olması gerekiyor. O zaman biz de bu doğrultuda description değişkenini kullanarak sınıfımızı geliştirelim:

Üst kısımları tekrar tekrar vermemek için üç nokta koyuyorum oralara. Şimdilik gördüğümüz üç element gerekli olan elementlerdi. İsterseniz feed_type ya da feed_copyright gibi özellikleri de kullanabilirsiniz. Her şey iyi hoş ama bu işlemler bize içerikleri getirmiyor. Evet şimdi artık Feed sınıfının işlevlerini yani fonksiyonlarını kullanabiliriz. Öncelikle tüm içerikleri çekelim. Bu içerikleri views.py dosyasındaki gibi çekiyoruz.

Buradaki items() işlevi Feed classını miras almamızdan dolayı geliyor. Daha sonra return ettiği bilgi ise Post modelimizde de belirttiğimiz içeriklerdir. Tıpkı bir views.py içinde oluşturulan işlevdeki çalışma gibi düşünelim. Buraya kadar güzel ancak henüz herhangi bir şekilde yine başlık, içerik vs. görüntüleyemiyoruz. Bunun için diğer işlevleri de kullanmalıyız. Öncelikle item_title() işlevini kullanarak çekilen içeriğin başlığını gösterelim.

Görmüş olduğumuz gibi itemtitle işlevi de aldığı argümanın title özelliğini döndürüyor. Buradaki item.title’da title kısmı bizim modelimizde bulunan title’dır. Artık içeriklerin başlıklarını görebiliriz. Şimdi de itemdescription() işlevi ile içeriğin ( yazı olduğunu düşünüyoruz ) bir kısmını gösterelim:

Yukarıdaki title kısmı için olan açıklamaların aynısını burası için de yapabilirim. Sadece bilmemiz gereken title ve content Post modelinden gelen değerler. Ayrıca eklemem gereken bir şey item* işlevler için return edilen değerlere HTML eklemesi yapabilirsiniz. Örneğin   gibi. Şimdi son olarak da içeriğin URL’sini vermeliyiz. Bunun için itemlink() işlevini kullanacağız:

Bu kısmı nasıl açıklayayım bilmiyorum ancak bunu yaparken Post gibi modelleriniz içerisinde getabsoluteurl() bulunması gerekebilir. kwars içerisindeki slug özelliğine denk gelen item.slug ise yine Post modelimizde belirtilen slug alanıdır. Son haliyle sınıfımıza bakalım:

Sınıfımız hazır ancak bunu bir de URL olarak belirtmeliyiz ki feed adresine de erişebilelim. Bunun için uygulamamızın urls.py dosyasını açalım ve oluşturduğumuz feeds dosyasındaki PostsFeed ( sizinki nedir bilemem ) classını dahil edelim:

from .feeds import PostsFeed

Bu işlemi başarıyla yaptıysak bir URL eklemesi yapabiliriz:

Artık feed çağrısı yapıldığında PostsFeed class’ı çalışacak ve içerikleri döndürecektir. Örneğin http://localhost/feed gibi düşünelim. Hatalı olduğum nokta var ise bildirmenizden memnuniyet duyarım. Kendimce aktarmaya çalıştım.