Reg Ex Django Url Conf - PullRequest
       12

Reg Ex Django Url Conf

4 голосов
/ 21 июня 2010

Это мой django URLconf:

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)),
)

Я не понимаю, что делает r в этом регулярном выражении:

r'^polls/$

Я не понимаю, что делает это регулярное выражение:

(?P<poll_id>\d+)

И я не понимаю, почему в:

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

Нет знака $, и он все еще работает ...

Не знаюЯ не понимаю, какой URLconf мне нужно добавить, чтобы увидеть сайт под http://127.0.0.1:8000/

Ответы [ 4 ]

5 голосов
/ 21 июня 2010

«r» обозначает «необработанную» строку, которая облегчает жизнь при попытке написать регулярные выражения (в конечном итоге вы не избегаете escape-символов). http://docs.python.org/library/re.html#raw-string-notation

Что касается второго вопроса, он создает именованную группу совпадений из 1 или более цифр и передает это значение в представление как poll_id. http://docs.djangoproject.com/en/1.2/topics/http/urls/#named-groups

Причина, по которой в строке администратора нет символа $, заключается в том, что вы хотите, чтобы все URL-адреса, начинающиеся с / admin, передавались в приложение администратора. $ - это специальный символ, который определяет конец строки. Так что, если бы был $, то только приложение url / admin передавалось бы приложению администратора, а не / admin / foo или /admin/foo/bar.

1 голос
/ 21 июня 2010

Мои регулярные выражения в Python ржавые, но здесь идет речь:

r'^polls/$

означает, что ^ начинается с.
$ означает конец

(?P<poll_id>\d+) означаетцелое число \d+, которое в моем коде будет помещено в переменную poll_id

(r'^admin/', include(admin.site.urls))
, не имеет $, потому что вы можете не захотеть, чтобы URL заканчивался там.Вы хотите, чтобы admin / что-то еще было передано вашему классу admin.sites.urls.

1 голос
/ 21 июня 2010
0 голосов
/ 21 июня 2010

r означает, что предоставленная строка является необработанной, а escape-символы следует игнорировать.Строка (r'^admin/', include(admin.site.urls)) не имеет $, потому что она включена для другого URL-адреса.Таким образом, конец $ находится где-то в admin.site.urls.

...