| | 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] |