Reg Ex Django URL Conf
Frage
Dies ist mein 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)),
)
Ich verstehe nicht, was die r in dieser Regex tut:
r'^polls/$
Ich verstehe nicht, was das Regex tut:
(?P<poll_id>\d+)
Und ich verstehe nicht, warum in:
(r'^admin/', include(admin.site.urls))
Es gibt keine $
Zeichen und es funktioniert immer noch ...
Ich verstehe nicht, was URLconf ich muss hinzufügen, um eine Website unter http://127.0.0.1:8000/
siehe
Lösung
Die ‚r‘ bezeichnet einen ‚raw‘ Zeichenfolge, die das Leben leichter macht, wenn zu schreiben Regexes versucht (Sie nicht über das Escape-Zeichen Flucht am Ende). http://docs.python.org/library/re.html#raw -string-Notation
Was die zweite Frage geht, schafft es eine benannte Match-Gruppe mit 1 oder mehr Ziffern und übergibt diesen Wert auf die Ansicht als ‚poll_id‘. http://docs.djangoproject.com/en/1.2/ Themen / http / Urls / # named-Gruppen
Der Grund, es nicht ein $ auf dem Admin-String ist, dass Sie alle Urls mögen, die mit / admin starten an die Admin App weitergeleitet werden. $ Ist ein spezielles Zeichen, das das Ende eines Strings definiert. Also, wenn es ein $ waren, dann nur die URL / admin würde an den Admin App übergeben werden, nicht / admin / foo oder / admin / foo / bar.
Andere Tipps
Lesen Sie die Dokumentation, http: // docs.djangoproject.com/en/1.2/topics/http/urls/#topics-http-urls
Mein Python Regex ist rostig, aber hier geht:
r'^polls/$
die ^
Mittel beginnt mit.
Die $
bedeutet das Ende
(?P<poll_id>\d+)
bedeutet eine ganze Zahl \d+
, die in meinem Code wird in eine Variable gesetzt werden poll_id
(r'^admin/', include(admin.site.urls))
nicht ein $ haben, weil Sie nicht können die URL wollen dort zu beenden. Sie wollen admin / somethingelse auf Ihre admin.sites.urls-Klasse übergeben werden.
Die r
bedeutet die bereitgestellte Zeichenfolge ist roh und Escape-Zeichen ignoriert werden sollte. Die (r'^admin/', include(admin.site.urls))
Linie hat keine $
, weil es eine Include für eine andere URL confs ist. Also das Ende $
ist irgendwo in der admin.site.urls
.