[#4775] mise en place de sitemap et robots.txt
authorPA Parent <paparent@paparent.me>
Fri, 14 Dec 2012 16:22:54 +0000 (11:22 -0500)
committerPA Parent <paparent@paparent.me>
Fri, 14 Dec 2012 16:22:54 +0000 (11:22 -0500)
auf_savoirs_en_partage/settings.py
auf_savoirs_en_partage/sitemaps.py [new file with mode: 0644]
auf_savoirs_en_partage/templates/robots.txt [new file with mode: 0644]
auf_savoirs_en_partage/urls.py
auf_savoirs_en_partage/views.py

index c486893..134340e 100644 (file)
@@ -6,6 +6,8 @@ from conf import *  # NOQA
 PROJECT_HOME = os.path.dirname(__file__)
 HOME = os.path.dirname(PROJECT_HOME)
 
+SITE_ID = 1
+
 ADMINS = ()
 
 LOGGING = {
@@ -101,6 +103,8 @@ INSTALLED_APPS = (
     'django.contrib.contenttypes',
     'django.contrib.messages',
     'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.sitemaps',
     'django.contrib.staticfiles',
     'pagination',
     'django_roa',
diff --git a/auf_savoirs_en_partage/sitemaps.py b/auf_savoirs_en_partage/sitemaps.py
new file mode 100644 (file)
index 0000000..9c6b2a1
--- /dev/null
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+from dateutil import parser
+from django.contrib.sitemaps import Sitemap
+
+from chercheurs.models import Chercheur
+from savoirs.models import Actualite, Evenement, Record
+from sitotheque.models import Site
+
+
+class ActualiteSitemap(Sitemap):
+
+    def items(self):
+        return Actualite.objects.all()
+
+    def lastmod(self, obj):
+        return obj.date
+
+
+class ChercheurSitemap(Sitemap):
+
+    def items(self):
+        return Chercheur.objects.all()
+
+    def lastmod(self, obj):
+        return obj.date_modification
+
+
+class EvenementSitemap(Sitemap):
+
+    def items(self):
+        return Evenement.objects.all()
+
+
+class SiteSitemap(Sitemap):
+
+    def items(self):
+        return Site.objects.all()
+
+    def lastmod(self, obj):
+        return obj.date_maj
+
+
+class RecordSitemap(Sitemap):
+
+    def items(self):
+        return Record.objects.all()
+
+    def lastmod(self, obj):
+        return parser.parse(obj.last_update)
+
+
+sitemaps = {
+    'actualites': ActualiteSitemap(),
+    'chercheurs': ChercheurSitemap(),
+    'evenements': EvenementSitemap(),
+    'ressources': RecordSitemap(),
+    'sites': SiteSitemap(),
+}
diff --git a/auf_savoirs_en_partage/templates/robots.txt b/auf_savoirs_en_partage/templates/robots.txt
new file mode 100644 (file)
index 0000000..0457371
--- /dev/null
@@ -0,0 +1,3 @@
+User-agent: *
+Disallow:
+Sitemap: http://{{ domain }}/sitemap.xml
index 2682fc3..45dd3a2 100644 (file)
@@ -12,6 +12,10 @@ from savoirs.rss import \
 
 from chercheurs.forms import ReactiverForm
 
+from sitemaps import sitemaps
+
+from views import RobotsTxtView
+
 
 admin.autodiscover()
 
@@ -270,6 +274,11 @@ urlpatterns = sep_patterns + patterns(
     # Django-selectable
     (r'^djselectable/', include('selectable.urls')),
 
+    # Robots.txt et Sitemaps
+    (r'^robots\.txt$', RobotsTxtView.as_view()),
+    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
+    (r'^sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
+
     # Page statique ?
     url(r'^(?P<id>.*)/$', 'savoirs.views.page_statique'),
 
index 7023a62..911a915 100644 (file)
@@ -2,9 +2,27 @@
 
 from django.shortcuts import render_to_response
 from django.template import RequestContext
+from django.views.generic import TemplateView
+from django.contrib.sites.models import Site
+
 
 def page_404(request):
     return render_to_response("404.html", context_instance = RequestContext(request))
 
+
 def page_500(request):
     return render_to_response("500.html", context_instance = RequestContext(request))
+
+
+class RobotsTxtView(TemplateView):
+
+    template_name = 'robots.txt'
+
+    def get_context_data(self, **kwargs):
+        context = super(RobotsTxtView, self).get_context_data(**kwargs)
+        context['domain'] = Site.objects.get_current().domain
+        return context
+
+    def render_to_response(self, context, **response_kwargs):
+        response_kwargs['content_type'] = 'text/plain'
+        return super(RobotsTxtView, self).render_to_response(context, **response_kwargs)