Neben den Kern-Bestandteilen bietet Django zusätzliche Komponenten zur Erleichterung von Routine-Aufgaben. Dazu gehört auch das Sub-Framework zur Erstellung von Sitemaps.
Sitemaps bestehen aus XML-Dateien und bieten eine alternative Methode zur Indizierung von Web-Seiten durch Suchmaschinen. Innerhalb der XML-Datei werden alle URLs der betreffenden Web-Site angegeben. Dadurch können Suchmaschinen auch auf dynamisch erzeugte Seiten gelenkt werden, die nicht in der Navigation erscheinen oder aufgrund einer tief verschachtelten oder sich ändernder Navigationsstruktur weniger häufig besucht werden.
Weitere Informationen sowie das Sitemap-Protokoll sind auf Sitemap.org sowie bei Google zu finden.
Die Einbindung mit Django gestaltet sich sehr einfach, ausführliche Hinweise sind der Sitemap-Dokumentation zu entnehmen.
Das folgende Beispiel bezieht sich auf eine Sitemap für alle Artikel auf dieser Site.
Zunächst muss die Sitemap-Anwendung in der Konfigurationsdatei settings.py in die Liste der installierten Applikationen aufgenommen werden. Voraussetzung ist die Nutzung der Sites-Applikation.
INSTALLED_APPS = (
[...]
'django.contrib.sites',
'django.contrib.sitemaps',
[...]
)
Des weiteren ist sicherzustellen, dass der folgende, als Standard gesetzte Eintrag in der Liste der Template Loaders auftaucht.
TEMPLATE_LOADERS = (
[...]
'django.template.loaders.app_directories.load_template_source',
[...]
)
Zur Generierung von Sitemaps wird die Sitemap-Klasse in der eigenen Anwendung abgeleitet. Im konkreten Beispiel ist dazu im Applikations-Verzeichnis asap eine Datei sitemap.py erstellt worden:
from django.contrib.sitemaps import Sitemap
from kuerbisorg.asap.models import Item
class ItemSitemap(Sitemap):
changefreq = „weekly“
priority = 1.0
def items(self):
return Item.objects.filter(published=True).order_by(‚-dt_created‘)
def lastmod(self, obj):
return obj.dt_edited
Als Attribute finden sich die im Sitemap-Protokoll definierten XML-Tags wieder. Der Wert für Priority kann zwischen 0.0 und 1.0 variieren. Der Wert wurde hier auf 1.0 gesetzt, da in der endgültigen Sitemap weitere Einträge erscheinen, die eine geringere Relevanz besitzen. Die Häufigkeit der Änderung von Inhalten wird durchchangefreq ausgedrückt. Dies ist jedoch als Empfehlung zu verstehen, Suchmaschinen können in der tatsächlichen Besuchsfrequenz abweichen.
Die Liste aller Artikel dieser Site wird durch die Methode items() erzeugt. Die Methode lastmod() gibt für jeden Artikel das Datum der letzten Änderung aus. Die optionale Methode location() kann dazu verwendet werden, die URL zu erzeugen. Als Standard wird diejenige URL verwendet, die durch die Methode get_absolute_url() der korrespondierenden Modell-Klasse zurück gegeben wird.
Der letzte Schritt besteht in der Einbindung der Sitemap-View in die urls.py. Dazu gehört die Festlegung der URL, in de der die Sitemap aufgerufen werden soll, sowie die Einrichtung der Sitemap-Klasse:
from kuerbisorg.asap.sitemap import ItemSitemap, TagSitemap
[...]
sitemaps = {
‚asap‘: ItemSitemap,
‚tag‘: TagSitemap,
}
[…]
urlpatterns = patterns(“,
[…]
(r’^sitemap.xml$‘, ‚django.contrib.sitemaps.views.sitemap‘, {’sitemaps‘: sitemaps}),
)
Hier werden zwei Sitemap-Klassen eingerichtet. Die Sitemap ist als sitemap.xml im Hauptverzeichnis erreichbar. Der Sitemap-View wird das Dictionary sitemaps mit den zuvor erstellten Sitemap-Klassen übergeben.
Das Sitemap-Framework bietet weitere Möglichkeiten wie die Nutzung von Sitemaps mit Generic Views oder dem Flatpage-Modul. Des Weiteren kann eine automatisch erzeugte Nachricht an Google („Google-Ping“) bei Veränderung der Sitemap versendet werden.
Eine Sitemap in weniger als einer halben Stunde aufzubauen, ohne sich mit der genauen Struktur oder gar Erstellung des XML beschäftigen zu müssen? Kein Problem! Django bietet auch dafür eine schnelle und saubere Lösung.