fatiherikli

django'nun tadından yenmeyen en güzel yanlarından bir tanesi daha; sitemap framework. sitemap ile ilgili işlemlerinizi aşırı derecede kolaylaştırmakta ayrıca tek bir manage.py komutu ile sitemap'ınızı google'a bildirmenizi sağlamaktadır.

hemen bir senaryo düşünelim. varsayalım Game adında bir modelimiz olsun. her yeni oyun eklediğimizde oluşan sitemap'ı google'a biz hiç bir şey yapmadan bildirsin. aynı zamanda kodlarımız tertemiz olsun.

ilk olarak manage.py üzerinden ping_google komutunu kullanabilmemiz için sitemaps paketini INSTALLED_APPS'e eklememiz gerekmekte.

INSTALLED_APPS = (
    ...
    'django.contrib.sitemaps',
    ...
)

şimdi de game isimli application'ımızda sitemaps.py şeklinde bir dosya açalım ve sitemap'imizi oluşturalım.

from django.contrib.sitemaps import Sitemap
from game.models import Game

class GameSiteMap(Sitemap):
    changefreq = "never"
    priority = 0.5

    def items(self):
        return Game.objects.all()

    def lastmod(self, obj):
        return obj.create_date

sitemap'ımızı oluşturmuş olduk. evet bu kadar :) hatta class oluşturmadan direk urls.py içinde kullanabildiğiniz GenericSitemap adında bir class'ı da bulunmakta. ancak bu şekilde daha okunabilir ve düzenli olmakta kanımca.

şimdi /sitemap.xml şekilde erişim için urls.py dosyamızı şu şekilde ayarlayalım.

from game.sitemaps import GameSiteMap
sitemaps = {
    'game' : GameSiteMap
}

urlpatterns = patterns('',
    ...  
    # sitemaps
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})

)

tarayıcınızda /sitemap.xml'i açtığınızda sitemap'in oluşmuş olduğunu göreceksiniz.

peki bu sitemap'i google'a en kolay yoldan nasıl bildiririz. şöyle;

python manage.py ping_google

bu işlemi yapabilmeniz için web sitenizin google webmaster tools'ta kayıtlı olması gerekmektedir.

her oyun eklendiğinde otomatik olarak sitemap'imizi bildirme işlemini yapmak için ise sinyallerle ya da direk modelimizin save metodunu ezerek yapabiliriz.

from django.contrib.sitemaps import ping_google  
class Game(models.Model):
     # ...
     def save(self, **kwargs):
         instance = super(Game, self).save(**kwargs)
         ping_google()

bu kadar. salın kağlıcakla :)

comments powered by Disqus