2010-06-21 9 views
4

C'est mon django URLconf:Reg Ex Django Url Conf

urlpatterns = patterns('', 
    ('^hello/$', hello), 
    (r'^polls/$', 'mysite.polls.views.index'), 
    (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'), 
    (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'), 
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'), 
    (r'^admin/', include(admin.site.urls)), 
) 

Je ne comprends pas ce que le r dans ce regex fait:

r'^polls/$ 

Je ne comprends pas ce que cela fait Regex :

(?P<poll_id>\d+) 

Je ne comprends pas pourquoi:

(r'^admin/', include(admin.site.urls)) 

Il n'y a aucun signe $ et il fonctionne encore ...

Je ne comprends pas ce que URLConf je dois ajouter, pour voir un site sous http://127.0.0.1:8000/

Répondre

5

Le 'r' indique une chaîne 'brute', ce qui rend la vie plus facile en essayant d'écrire des expressions rationnelles (vous n'abandonnez pas les caractères d'échappement). En ce qui concerne la deuxième question, elle crée un groupe de correspondance nommé de 1 ou plusieurs chiffres et transmet cette valeur à la vue sous la forme 'poll_id'. La raison pour laquelle il n'y a pas de $ sur la chaîne admin est que vous voulez que toutes les URL commençant par/admin soient passées à l'application d'administration. $ est un caractère spécial qui définit la fin d'une chaîne. Donc, s'il y avait un $, alors seulement l'url/admin serait passé à l'application d'administration, pas/admin/foo ou/admin/foo/bar.

+0

On dirait que la version 1.2 des documents a disparu. Voici le lien vers les docs actuels à partir d'aujourd'hui: https://docs.djangoproject.com/fr/1.6/topics/http/urls/#named-groups – pandita

1

Mon python regex est rouillé, mais ici va:

r'^polls/$ 

les moyens ^ commence par.
Le $ signifie la fin

(?P<poll_id>\d+) signifie un entier \d+ qui dans mon code sera mis dans une variable poll_id

(r'^admin/', include(admin.site.urls))
ne dispose pas d'un $ parce que vous ne voulez pas l'URL pour terminer là . Vous voulez que admin/somethingelse soit transmis à votre classe admin.sites.urls.

0

Le r signifie que la chaîne fournie est brute et que les caractères d'échappement doivent être ignorés. La ligne (r'^admin/', include(admin.site.urls)) n'a pas de $ parce que c'est un include pour une autre config url. Donc, la fin $ est quelque part dans le admin.site.urls.