Gestion des urls dans django
Par NiCoS le mardi 31 octobre 2006, 21:35 - Python - Django - Lien permanent
Dans Django, il est possible de définir les urls à différents endroits :
- au niveau du projet : dans monprojet/urls.py
- au niveau de chaque application : dans monprojet/monapplication/urls.py
Solution 1 : vous stockez les urls au niveau du projet :
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls')), (r'^app/$', 'monprojet.monapplication.views.index'), (r'^app/page', 'monprojet.monapplication.views.page'), )
Solution 2 : au niveau de chaque application :
Dans monprojet/urls.py :
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls')), (r'^app/', include('monprojet.monapplication.urls')), )
et dans monprojet/monapplication/urls.py - attention à bien définir un chemin relatif (voir plus bas pour plus d'explications) :
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'monprojet.monapplication.views.index'), (r'^page', 'monprojet.monapplication.views.page'), )
Vous pouvez même simplifier ce dernier élément de la façon suivante :
from django.conf.urls.defaults import * urlpatterns = patterns('monprojet.monapplication', (r'^$', 'views.index'), (r'^page', 'views.page'), )
Pour le contenu de monprojet/monapplication/urls.py, attention à ne pas faire apparaître une deuxième fois le chemin, comme on pourrait le croire :
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^app/$', 'monprojet.monapplication.views.index'), (r'^app/page', 'monprojet.monapplication.views.page'), )
Faute de quoi, django vous renverra une erreur 404 si vous appelez http://www.domain.tld/app/ car il cherchera le motif http://www.domain.tld/app/app/. Le premier "app" est en fait déjà définit dans monprojet/urls.py et le second dans monprojet/monapplication/urls.py.
En savoir plus : http://www.djangoproject.com/documentation/url_dispatch/