2010-11-17 3 views
0

J'ai un fournisseur qui veut un sitemap qui contient beaucoup plus de méta-données que ce que vous verriez dans un sitemap pour moteur de recherche normal. En conséquence, je voudrais trouver une façon ordonnée d'étendre le module Sitemap de Django. Est-ce que quelqu'un a fait ça? Ou pourriez-vous fournir à ce django Noob le code pour le faire?Comment étendre le module sitemap de Django pour créer des sitemaps plus complexes?

Mike

+0

Que voulez-vous exactement faire? Êtes-vous sûr que ce n'est pas possible avec la classe Sitemap? Voir aussi: http://docs.djangoproject.com/fr/dev/ref/contrib/sitemaps/ – stefanw

Répondre

2

Si vous voulez vraiment faire cela, vous devrez étendre django.contrib.sitemaps.Sitemap.get_urls pour ajouter les informations méta supplémentaires au dictionnaire url_info. Le get_urls courant est donnée ci-dessous à partir django.contrib.sitemaps:

def get_urls(self, page=1, site=None): 
    if site is None: 
     if Site._meta.installed: 
      try: 
       site = Site.objects.get_current() 
      except Site.DoesNotExist: 
       pass 
     if site is None: 
      raise ImproperlyConfigured("In order to use Sitemaps you must either use the sites framework or pass in a Site or RequestSite object in your view code.") 

    urls = [] 
    for item in self.paginator.page(page).object_list: 
     loc = "http://%s%s" % (site.domain, self.__get('location', item)) 
     priority = self.__get('priority', item, None) 
     url_info = { 
      'location': loc, 
      'lastmod': self.__get('lastmod', item, None), 
      'changefreq': self.__get('changefreq', item, None), 
      'priority': str(priority is not None and priority or '') 
     } 
     urls.append(url_info) 
    return urls 

Après cela, vous devrez changer django/contrib/sitemaps/templates/sitemap.xml d'inclure vos informations supplémentaires dans le plan du site. Sans rapport avec Django si vous ajoutez des méta-informations supplémentaires, vous devriez lire la section sur le protocole sitemaps.org concernant extending the protocol.

+0

C'était parfait, merci! – Werda

Questions connexes