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/

¿Fue útil?

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top