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/