سؤال

هذه هي بلدي 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top