Django'da Sitemap.xml Yapımı / Turkish Tutorial
Merhaba arkadaşlar ben Seyda Bozkurt uzun süredir Python diliyle ilgileniyorum. Bugünde Django ile Sitemap.xml yapmayı anlatacağım. öncelikle sitemap.xml (Site haritası) nedir ondan bahsedeyim. site haritaları sitenizdeki paylaşılan konuları daha hızlı indeks almasını sağlıyor. Google gibi arama motorlarının robotları sitenize girip konuları inceleyerek indeksler ve sitenizin google da gösterilmesini sağlar. site haritanız olursa daha pratik daha kolay şekilde yardımcı olur. Seo (arama optimizasyonu) açısından da yararlı olduğu söyleniyor. Python ile kodladığınız sitelerinize artık o dile ait sitemap ekleye bilirsiniz.
Başlayalım
Önce projenizde bulunan setting.py kısmını açın. INSTALLED_APP buluduğu alana aşağıda ki kodları eklemeyi unutmayın.
django.contrib.sitemaps
sites framework 'ün yüklü olduğundan emin olun.
projenizdeki myapp/templates klasörünü açın ve içerisine şöyle bir dosya açın sitemap.xml ve içine aşağıdaki kod satırlarını eklemeyi unutmayın
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>{{ url.location }}</loc>
{% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
</url>
{% endfor %}
{% endspaceless %}
</urlset>
eğer web siteniz bir haber sitesi ise şu şekilde etiketini kullanarak daha güzel seo ayarı yapmış olursunuz ama haber sitesi değil ise yukarıdaki gibi sitemap.xml dosyası oluştursanız yeterlidir.
haber siteleri için ;
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>{{ url.location }}</loc>
{% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
<news:news>
{% if url.item.time %}<news:publication_date>{{ url.item.time|date:"Y-m-d" }}</news:publication_date>{% endif %}
{% if url.item.tag %}<news:keywords>{{ url.item.tag }}</news:keywords>{% endif %}
</news:news>
</url>
{% endfor %}
{% endspaceless %}
</urlset>
Şimdi views.py ye girelim açıklamaları kodların içine yazdım.
# views.py dosyanızın içine
from models import Blog
# model dosyamızdan Blog adlı sınıfı çağırıyoruz
# Blog model sınıfını örnek için veriyorum siz içeriklerinizi hangi model sınıfında tutuyorsanız yanı
# hangi model sınıfı için site haritası yapacaksanız onu çağırın
from django.contrib.sitemaps import Sitemap
# django nun sitemap sınıfını çağırıyoruz
class BlogSitemap(Sitemap):
# sınıf ismimizi verdik ve çağırdığımız Sitemap sınıfından miras alıyoruz
changefreq = "daily" # bu değişkenimiz site haritasında yazacak olan ne
# sıklıkla tarayacağı bilgisini yazar { daily always weekly }
# gibi seçenekler vardır araştırın
priority = 1.0 # priority değişkenimiz tarama önceliğini arama motorlarına belirtir
# 0.1 ,0.6 veya 1.0 gibi değerler verilebilir size kalmış
def items(self): # items fonksiyonu Blog nesnesindeki her öğeyi belirtir yani
# item.url , veya item.time diyerel modelinize ait değişkenleri alabilirsiniz
return Blog.objects.all()
def lastmod(self,obj): # lastmod fonksiyonu içeriğinizin en son değiştirilme tarihini gösterir.
return Blog.objects.filter(user = obj.user)[0].lastmod
# benim modelimde en son değişme tarihi bu şekilde kayıtlı
# olduğu için ben bu şekilde aldım , kullanıcının yazmış olduğu en
# son içerik tarihini alıyorum buda en son güncelleme zamanını vermiş oluyor ve bu bilgiyi return ile gönderiyorum
def location(self,obj): # location fonksiyonu içerik adreslerinin tutulduğu yerdir
return obj.url # items fonksiyonunda gönderdiğimiz model nesnemizin öğelerine erişmek için
# (self,obj) şu parametreleri kullanıp obj değişkenindeki
# ( bu bizim çağırdığımız model oluyor ) ögelere erişebiliyoruz bende içerik adreseri
# Blog modelimde url değişkeninde olduğu için bu şekilde çağırdım.
views.py yi de ayarladığımıza göre urls.py bölümüne girip son ayarımızı yapıyoruz.
açıklamalar yine kodlar da mevcut:
from django.contrib.sitemaps.views import sitemap
# urls.py için django sitemap fonksiyonunu ekledik.
from views import BlogSitemap # şeklinde views.py içindeki site harita sınıfımı çağırdım
# sizlerde import işlemleri urls.py ve views.py dosyalarının konumuna göre değişebilir
# bunu import etme kurallarını araştırıp sıkıntısız bir şekilde dahil edebilirsiniz
sitemaps = {
"blog":BlogSitemap(),
}
"""
sitemaps adında bir sözlük (dict) tipinde bir değişken açtık ve
az önce views.py de ayarladığımız blog site harita sınıfını "blog" şeklinde sözlüğümüze gönderdik
eğer birden fazla site haritası ekleyecekseniz yine views.py de az önce yaptığımız işlemleri başka eklemek istediğiniz model sınıfınızı dahil ederek ayarlayıp o sınıfı urls.py içine çağırarak ( import ederek ) sitemaps sözlüğüne eklemeniz yetecektir.
"""
urlpatterns = [
url(r'^$', home,name = "home"),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}),
# son olarak burada sitemap.xml adres kısmını oluşturduk ve django nun sitemap
# fonksiyonunu koyduk ikinci paramatere olarak
# daha sonra {'sitemaps': sitemaps} şu sözlük ile de yukarıda oluşturduğumuz sitemaps
# oluşturduğum sitemap sınıflarını gönderdim ve işlem bitti hepsi bu kadar
]
şimdi projenizden /sitemap.xml şeklinde ki adrese giderek site haritanızı görüntüleyebilirsiniz.
Posted on Utopian.io - Rewarding Open Source Contributors
Source: http://www.coogger.com/hakancelik/python-django/djangoda-sitemap-ozelligini-kullanarak-site-haritas-olusturmak/
Not indicating that the content you copy/paste is not your original work could be seen as plagiarism.
These are some tips on how to share content and add value:
Repeated plagiarized posts are considered spam. Spam is discouraged by the community, and may result in action from the cheetah bot.
If you are actually the original author, please do reply to let us know!
Thank You!
More Info: Abuse Guide - 2017.
Your contribution cannot be approved because it does not follow the Utopian Rules, and is considered as plagiarism. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.
http://www.coogger.com/hakancelik/python-django/djangoda-sitemap-ozelligini-kullanarak-site-haritas-olusturmak/
You can contact us on Discord.
[utopian-moderator]