Reg Ex Django url conf
سؤال
هذه هي بلدي urlconf 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)),
)
لا أفهم ماذا يفعل R في هذا Regex:
r'^polls/$
لا أفهم ما يفعله هذا Regex:
(?P<poll_id>\d+)
وأنا لا أفهم لماذا في:
(r'^admin/', include(admin.site.urls))
لا يوجد $
علامة وما زالت تعمل ...
لا أفهم ما هو urlconf الذي يجب أن أضيفه ، لرؤية موقع تحت http://127.0.0.1:8000/
المحلول
تشير "R" إلى سلسلة "RAW" ، مما يجعل الحياة أسهل عند محاولة كتابة regexes (لا ينتهي بك الأمر إلى الهروب من شخصيات الهروب). http://docs.python.org/library/re.html#raw-string-notation
بقدر ما يذهب السؤال الثاني ، فإنه ينشئ مجموعة مطابقة مسماة من رقم واحد أو أكثر ، وينتقل هذه القيمة إلى العرض باسم "poll_id". http://docs.djangoproject.com/en/1.2/topics/http/urls/#named-groups
والسبب في عدم وجود $ على سلسلة المسؤول هو أنك تريد جميع عناوين URL التي تبدأ مع /المسؤول إلى تطبيق المسؤول. $ هي شخصية خاصة تحدد نهاية السلسلة. لذلك إذا كان هناك $ ، فسيتم تمرير عنوان URL /المسؤول فقط إلى تطبيق المسؤول ، وليس /مسؤول /foo أو /admin /foo /bar.
نصائح أخرى
بيثون ريجكس صدئ ولكن هنا يذهب:
r'^polls/$
ال ^
يعني يبدأ.
ال $
يعني النهاية
(?P<poll_id>\d+)
يعني عدد صحيح \d+
الذي سيتم وضعه في الكود الخاص بي في متغير poll_id
(r'^admin/', include(admin.site.urls))
ليس لديك $ لأنك قد لا تريد أن ينتهي عنوان URL هناك. تريد أن يتم تمرير admin/somethingelse إلى admin.sites.urls class.
ال r
تعني أن السلسلة المقدمة خام ويجب تجاهل أحرف الهروب. ال (r'^admin/', include(admin.site.urls))
الخط لا $
لأنه يشمل عنوان URL آخر. لذلك النهاية $
في مكان ما في admin.site.urls
.