Gérer le fichier robots.txt avec Django
Lorsque j’ai mit en place LifeDo, je me suis rendu compte que Django m’envoyait souvent des mails a cause d’une erreur générée par un fichier robots.txt introuvable. J’ai alors cherché un peu sur le net et trouvé Django robots. Cette application a l’air relativement complète et efficace (gestion de règles spéciales par URL etc…). Cependant j’ai trouvé la solution un peu trop lourd pour mes besoins (fournir un fichier robots de deux trois lignes).
Voici donc une petite méthode que j’utilise afin de pouvoir fournir le fichier robots.txt. Elle n’est pas parfaite, loin de là, mais a au moins le mérite de faire ce pour quoi elle est prévue.
Je pars du principe que j’ai une application nommée misc (mais vous pouvez l’appeler comme bon vous semble) qui contient un fichier views.py. De plus, j’ai un urls.py a la racine de mon projet.
Il faut dans un premier temps définir la fonction qui va servir le fichier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from django.views.decorators.cache import cache_page
from django.http import HttpResponse
from django.conf import settings
import os
@cache_page(60*60*24*365) # Met cette fonction en cache pour 1 an
def robots(request,
template_name='robots.txt', # Nom du fichier (par defaut)
mimetype="text/plain"): # MIME : a ne pas changer
robots_path = os.path.join(settings.MEDIA_ROOT, template_name)
robots_file= open(robots_path, 'r')
robots_content = robots_file.read()
robots_file.close()
return HttpResponse(robots_content, mimetype=mimetype)
|
Ce code est donc à placer dans le fichier views.py.
Comme vous pouvez le voir, le fichier doit être placé (par défaut du moins) à la racine du répertoire où pointe le MEDIA_ROOT du settings.py. A ajuster selon vos besoin donc.
Ensuite, il faut faire le lien entre l’URL et cette nouvelle fonction. Voici ce à quoi votre urls.py doit ressembler :
1 2 3 4 5 6 7 8 | from django.conf.urls.defaults import *
# Vos autres imports ici
from misc.views import robots
urlpatterns = patterns('',
# Vos autres URLs ici
(r'^robots\.txt$', robots),
)
|
Voici un petit fichiers robots.txt (que j’utilise), à titre d’exemple :
1 2 | User-agent: *
Disallow: /admin/
|
Voilà. Comme ça, les robots ne vous embêterons plus :) .