/ / Reg Ex Django Url Conf - regex, django, urlconf

Reg Ex Django Url Conf - regex, django, urlconf

Voici mon URLconf de Django:

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 fait le r dans cette regex:

r"^polls/$

Je ne comprends pas ce que fait ce regex:

(?P<poll_id>d+)

Et je ne comprends pas pourquoi dans:

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

Il n'y a pas $ signe et ça marche toujours ...

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

Réponses:

5 pour la réponse № 1

Le "r" désigne une chaîne "brute", ce qui facilite la vie lorsque vous essayez d’écrire des expressions rationnelles (vous ne finirez pas par échapper aux caractères d’échappement). http://docs.python.org/library/re.html#raw-string-notation

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 en tant que "poll_id". http://docs.djangoproject.com/en/1.2/topics/http/urls/#named-groups

La raison pour laquelle il n’ya pas de "$ sur la chaîne d’administration estque vous souhaitez que toutes les URL commençant par / admin soient transmises à 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 admin, pas / admin / foo ou / admin / foo / bar.


1 pour la réponse № 2

lire les docs, http://docs.djangoproject.com/en/1.2/topics/http/urls/#topics-http-urls


1 pour la réponse № 3

Mon regex python est rouillé mais voici:

r"^polls/$

la ^ signifie 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))
n’a pas de $ parce que vous ne voulez peut-être pas que l’URL se termine là. Vous voulez que admin / quelquechose soit transmis à votre classe admin.sites.urls.


0 pour la réponse № 4

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