Reg Ex Django Url Conf
Pregunta
Estos es mi 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)),
)
No entiendo lo que el r en esta expresión regular hace:
r'^polls/$
No entiendo lo que esta expresión regular:
(?P<poll_id>\d+)
Y no entiendo por qué en:
(r'^admin/', include(admin.site.urls))
No hay ninguna señal $
y que todavía funciona ...
No entiendo lo URLconf tengo que añadir, para ver un sitio bajo http://127.0.0.1:8000/
Solución
La 'R' indica una cadena 'en bruto', lo que hace la vida más fácil cuando se trata de expresiones regulares de escritura (que no terminan escapando los caracteres de escape). http://docs.python.org/library/re.html#raw -string-notación
En cuanto a la segunda pregunta va, se crea un grupo llamado partido de 1 o más dígitos, y pasa ese valor a la vista como 'poll_id'. http://docs.djangoproject.com/en/1.2/ temas / http / URL / #-grupos nombrados
La razón no hay un $ en la cadena de administración es que desea que todos los URLs que comienzan con / admin que se pasan a la aplicación de administración. $ Es un carácter especial que define el final de una cadena. Así que si había un $, entonces sólo la URL / admin se pasa a la aplicación de administración, no / admin / foo o / admin / foo / bar.
Otros consejos
leer los documentos, http: // docs.djangoproject.com/en/1.2/topics/http/urls/#topics-http-urls
Mi expresiones regulares de Python es oxidado pero aquí va:
r'^polls/$
los medios ^
comienza con.
El $
significa el final
(?P<poll_id>\d+)
significa un número entero que \d+
en mi código será puesto en una variable poll_id
(r'^admin/', include(admin.site.urls))
no tiene un $, porque puede que no quiera la url para terminar allí. ¿Quieres admin / somethingelse ser pasado a su clase admin.sites.urls.
El r
significa la cadena entregada es cruda y caracteres de escape debe ser ignorada. La línea (r'^admin/', include(admin.site.urls))
no tiene $
porque es un include por otros confs url. Por lo que el $
final es en algún lugar del admin.site.urls
.