| 1 | = Criando Views Extensíveis = |
| 2 | |
| 3 | Uma view extensível é aquela que permite que seja customizada na declaração |
| 4 | da URL, ou seja, deve permitir a informação de parâmetros que determinem |
| 5 | partes relevantes de seu comportamento onde for possível. |
| 6 | |
| 7 | 1. Supondo que sua aplicação se chama "minha_app" que contenha as classes |
| 8 | "Produto" e "Categoria", edite o arquivo "views.py" de sua aplicação e crie |
| 9 | uma nova view, como esta abaixo:: |
| 10 | |
| 11 | {{{ |
| 12 | def produto(request, produto_id): |
| 13 | produto = Produto.objects.get(id=produto_id) |
| 14 | return render_to_response( |
| 15 | 'minha_app/produto.html', |
| 16 | locals(), |
| 17 | ) |
| 18 | }}} |
| 19 | |
| 20 | 2. Agora edite o arquivo urls.py de seu projeto e acrescente a seguinte URL: |
| 21 | |
| 22 | {{{ |
| 23 | url(r'produtos/(?P<produto_id>\d+)/', 'minha_app.views.produto'), |
| 24 | }}} |
| 25 | |
| 26 | isso será suficiente para exibir uma página a partir do template exibindo |
| 27 | informações do produto informado na URL. |
| 28 | |
| 29 | Entretanto, esse template pode não satisfazer no momento da declaração da URL, |
| 30 | em caso desta declaração ser feita por terceiros ou de forma customizada. |
| 31 | Portanto, é recomendável que essa view permita ser customizada, fazendo uma |
| 32 | modificação simples. |
| 33 | |
| 34 | 3. Acrescente o argumento "template_path" à view, que agora fica assim:: |
| 35 | |
| 36 | {{{ |
| 37 | def produto(request, produto_id, template_path='minha_app/produto.html'): |
| 38 | produto = Produto.objects.get(id=produto_id) |
| 39 | return render_to_response( |
| 40 | template_path, |
| 41 | locals(), |
| 42 | ) |
| 43 | }}} |
| 44 | |
| 45 | 4. E agora para testar, modifique a url como abaixo:: |
| 46 | |
| 47 | {{{ |
| 48 | url(r'produtos/(?P<produto_id>\d+)/', 'minha_app.views.produto', {'template_path': 'outra_app/detalhes_do_produto.html}), |
| 49 | }}} |
| 50 | |
| 51 | 5. Essa pequena modifição em sua view permite que ela seja extensível para um |
| 52 | codificador externo. Esta é uma prática recomendável para tornar suas |
| 53 | aplicações plugáveis, especialmente se você deseja distribuí-las ou utilizá-las |
| 54 | em outros projetos. |
| 55 | |
| 56 | É possível permitir extender a view com o template, classe de form, classe de |
| 57 | modelo, URL para redirecionamento e o que mais a imaginação permitir. |
| 58 | |
| 59 | ---- |
| 60 | Tire outras dúvidas em nosso [wiki:CookBookPortugues CookBook em Português] |