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

Reg Ex Django Url Conf - regex, django, urlconf

Questo è il mio 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)),
)

Non capisco cosa fa la r in questa regex:

r"^polls/$

Non capisco cosa fa questo Regex:

(?P<poll_id>d+)

E non capisco perché in:

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

Non c'è $ firmare e funziona ancora ...

Non capisco che URLconf devo aggiungere per vedere un sito sotto http://127.0.0.1:8000/

risposte:

5 per risposta № 1

La "r" indica una stringa "grezza", che semplifica la vita quando si tenta di scrivere regex (non si finisce per sfuggire ai caratteri di escape). http://docs.python.org/library/re.html#raw-string-notation

Per quanto riguarda la seconda domanda, crea un gruppo di corrispondenze denominato di 1 o più cifre e passa quel valore alla vista come "poll_id". http://docs.djangoproject.com/en/1.2/topics/http/urls/#named-groups

Il motivo per cui non c'è un $ t nella stringa di amministrazione èche desideri che tutti gli URL che iniziano con / admin vengano passati all'app di amministrazione. $ è un carattere speciale che definisce la fine di una stringa. Quindi se ci fosse un $, allora solo l'URL / admin verrebbe passato all'app admin, non / admin / foo o / admin / foo / bar.


1 per risposta № 2

leggi i documenti, http://docs.djangoproject.com/en/1.2/topics/http/urls/#topics-http-urls


1 per risposta № 3

Il mio python regex è arrugginito ma qui va:

r"^polls/$

il ^ significa inizia con.
Il $ significa la fine

(?P<poll_id>d+) significa un numero intero d+ che nel mio codice verrà inserito in una variabile poll_id

(r"^admin/", include(admin.site.urls))
non ha un $ perché potresti non volere che l'URL finisca qui. Vuoi che admin / qualcosa sia passato alla tua classe admin.sites.urls.


0 per risposta № 4

Il r significa che la stringa fornita è grezza e i caratteri di escape devono essere ignorati. Il (r"^admin/", include(admin.site.urls)) la linea non ha $ perché è un include per un altro URL conf. Quindi la fine $ è da qualche parte nel admin.site.urls.