Comment créer un sitemap avec le web-framework Django ?

Published: 14 avril 2019

DMCA.com Protection Status

Exemple de comment créer un sitemap pour un site web basé sur Django (version utilisée 1.11.10):

On va ici supposer un site avec une application intitulée "notebooks" avec l'organisation suivante:

database.db
manage.py
myproject / settings.py
            urls.py
notebooks / views.py
            models.py
            urls.py

avec models.py

class Article(models.Model): 
    full_path = models.TextField()
    date_created = models.DateTimeField(default=datetime.now) 
    date_modified = models.DateTimeField(default=datetime.now) 
    public = models.BooleanField(default=True)
    content = models.TextField()
    content_formatted = models.TextField()

ou full_path est l'adresse url pour un article donné (par exemple: /Articles/Mon-premier-article/)

et le fichier notebooks / urls.py

from django.conf.urls import url

from . import views

urlpatterns = [

    url(r'^About/$', views.about_view, name='about_view'),
    url(r'^Contact/$', views.contact_view, name='contact_view'),
    url(r'^Articles/$', views.home_view, name='home_view'),

]

Modifier le fichier settings.py

Première étape modifier le fichier settings.py et ajouter la ligne suivante "django.contrib.sitemaps" dans INSTALLED_APPS:

INSTALLED_APPS = [
    'notebooks.apps.NotebooksConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sitemaps',
]

Créer un fichier sitemaps.py

Créer un fichier vide sitemaps.py:

notebooks / views.py
           models.py
           urls.py
           sitemaps.py

Ajouter les pages statiques du site

Tout d'abord on peut ajouter les pages statiques du site (/About/, /Contact/) en éditant le fichier sitemaps.py comme ceci

from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse

class Static_Sitemap(Sitemap):

    priority = 1.0
    changefreq = 'yearly'

    def items(self):
        return ['about_view', 'contact_view']

    def location(self, item):
        return reverse(item)

Ajouter les pages dynamiques du site

On peut ensuite ajouter les pages du site associées aux articles:

from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse

from .models import Article

class Static_Sitemap(Sitemap):

    priority = 1.0
    changefreq = 'daily'


    def items(self):
        return ['about_view', 'contact_view']

    def location(self, item):
        return reverse(item)


class Article_Sitemap(Sitemap):
    changefreq = "daily"
    priority = 0.7

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

    def location(self, obj):
        return obj.note_full_path

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

Modifier le fichier urls.py

Dernière étape modifier le fichier myproject / urls.py

from django.conf.urls import include, url
from django.contrib import admin

from django.contrib.sitemaps.views import sitemap

from notebooks.sitemaps import Static_Sitemap
from notebooks.sitemaps import Article_Sitemap

sitemaps = {
    'article': Article_Sitemap(),
    'static': Static_Sitemap(),
}

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('notebooks.urls')),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]

Vérifier le fichier sitemaps.xml

Tester le fichier sitemaps crée par django en allant dans l'url http://127.0.0.1:8000/sitemap.xml:

Comment créer un sitemap avec le web-framework Django ?
Comment créer un sitemap avec le web-framework Django ?

Références

Image

of