| 68 | Quando é encontrada tal expressão, Django executa a função de callback com um objeto ``HTTPRequest`` como primeiro argumento, e qualquer valor “capturado” da expressão regular como argumentos chave, e opcionalmente, qualquer argumento do dicionário opcional (o terceiro item da tupla). |
| 69 | |
| 70 | Para mais detalhe sobre objetos ``HTTPRequest``, veja `request and response documentation`_. |
| 71 | Para mais detalhes sobre URLconfs, veja `URLconf documentation`_. |
| 72 | |
| 73 | Quando você executou ``python manage.py startproject mysite`` no começo do Tutorial 1, foi criado um URLconf padrão, em ``mysite/urls.py``. Além disso, foi automaticamente setado sua configuração ``ROOT_URLCONF`` para apontar para esse arquivo:: |
| 74 | |
| 75 | ROOT_URLCONF = 'mysite.urls' |
| 76 | |
| 77 | É hora de um exemplo. Edite ``mysite/urls.py`` para que fique da seguinte forma:: |
| 78 | |
| 79 | from django.conf.urls.defaults import * |
| 80 | |
| 81 | urlpatterns = patterns('', |
| 82 | (r'^polls/$', 'mysite.polls.views.index'), |
| 83 | (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'), |
| 84 | (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'), |
| 85 | (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'), |
| 86 | ) |
| 87 | |
| 88 | Uma pequena revisão. Quando alguém requisita uma página do se site – diga-se “/polls/23/”, Django vai carregar esse módulo Python, porque ele está apontado pela configuração ``ROOT_URLCONF``. Então, é encontrado uma variável chamada ``urlpatterns`` e realiza uma busca pela expressão regular. Quando é encontrada tal expressão regular - ``r'^polls/(?P<poll_id>\d+)/$'`` - é então carregado o pacote/modulo Python associado: ``mysite.polls.views.detail``. Isso corresponde à função ``detail()`` em ``mysite/polls/views.py``. Finalmente, é chamda a função ``detail()`` da seguinte forma:: |
| 89 | |
| 90 | detail(request=<HttpRequest object>, poll_id='23') |
| 91 | |
| 92 | A parte ``poll_id='23'`` vem de ``(?P<poll_id>\d+)``. Usando parentes em volta de um padrão “captura” o texto correspondente por aquele padrao e envia esse texto como argumento para a função da view; o ``?P<poll_id>`` define o nome que será usado para identificar o padrão; e ``\d+`` é uma expressão regular que indica uma seqüência de dígitos (ou seja, um número). |
| 93 | |
| 94 | Como os padrões de URL são expressões regulares, não há um limite no que você pode fazer com eles. E não há a necessidade de adicionar “URL cruft” como `.php`` - ao menos que você tenha um “belo” senso de humor, e queira fazer algo como:: |
| 95 | |
| 96 | (r'^polls/latest\.php$', 'mysite.polls.views.index'), |
| 97 | |
| 98 | Mas não o faça. É horrível. |
| 99 | |
| 100 | Note que essas expressões regulares não procuram por parâmetros GET e POST, ou pelo domínio do site. Por exemplo, em uma requisição para ``http://www.example.com/myapp/``, o URLconf irá, procurar por ``/myapp/``. Em uma requisição para ``http://www.example.com/myapp/?page=3``, o URLconf irá procurar por ``/myapp/``. |
| 101 | |
| 102 | .. _request and response documentation: http://www.djangoproject.com/documentation/request_response/ |
| 103 | .. _URLconf documentation: http://www.djangoproject.com/documentation/url_dispatch/ |