Executar View Através do Caminho/Nome

3 views
Skip to first unread message

marcos thomaz

unread,
Nov 22, 2009, 11:55:15 AM11/22/09
to django...@googlegroups.com
Olá a todos,

Estou com uma dúvida, creio eu ser bem boba, mas não consigo resolver.
Criei um modelo chamado Reports que possui tres atributos: nome, url e view.
Eu gostaria que, quando eu cadastrasse algum Report, por exemplo: 
nome = 'Lista de Clientes'
url = 'lista-de-clientes'
view='minhaapp.views.listaclientes'

Esse cadastro fosse exibido no index do admin, como um link para executar a view. Isso eu consegui até de forma simples (criei um context processor). Só que não estou conseguindo é fazer com que, quando o usuário clique no link, seja executada a view especificada. Visto que isso seria mais ou menos dinâmico, eu criei uma view padrão, que pega a url, faz a busca no modelo e tal.
Tipo, na url /reports/lista-de-clientes/, o sistema busque no modelo a linha equivalente. Isso é simples, mas como fazer para executar a view que foi cadastrada? Isso é que não consegui. Alguém poderia dar uma ajuda?

[]'s

Marcos Thomaz




Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes

Gustavo Henrique

unread,
Nov 22, 2009, 1:00:19 PM11/22/09
to django...@googlegroups.com
talvez o get_absolute_url seja uma opcao.



--
Gustavo Henrique
blog.gustavohenrique.net

marcos thomaz

unread,
Nov 22, 2009, 2:09:10 PM11/22/09
to django...@googlegroups.com
Mas para usá-lo, eu teria que ter as confiurações no urls.py para cada view, e é justamente isso que não quero. Queria apenas conseguir executar uma view qualquer, tendo apenas o "caminho" dessa view. Mas de qualquer forma obrigado, e vou dar uma pesquisada pra ver se serve.

[]'s

Marcos Thomaz


De: Gustavo Henrique <gusta...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Domingo, 22 de Novembro de 2009 16:00:19
Assunto: [django-brasil] Re: Executar View Através do Caminho/Nome

Mateus Lorandi

unread,
Nov 23, 2009, 8:18:39 AM11/23/09
to Django Brasil
Não tenho certeza, mas na urls.py você poderia fazer um loop para cada
elemento da classe Reports e adicionar ele no urlpatterns.
Mais ou menos assim:

urlpatterns = pattern('',
(r'^$', 'views.index'),
)

for report in Reports.objects.all():
urlpatterns += pattern('',
(report.url, report.view),
)

isso é válido?

Abraços!

On 22 nov, 17:09, marcos thomaz <marcosthom...@yahoo.com.br> wrote:
> Mas para usá-lo, eu teria que ter as confiurações no urls.py para cada view, e é justamente isso que não quero. Queria apenas conseguir executar uma view qualquer, tendo apenas o "caminho" dessa view. Mas de qualquer forma obrigado, e vou dar uma pesquisada pra ver se serve.
>
> []'s
>
> Marcos Thomaz
>
> ________________________________
> De: Gustavo Henrique <gustavo...@gmail.com>
> Para: django...@googlegroups.com
> Enviadas: Domingo, 22 de Novembro de 2009 16:00:19
> Assunto: [django-brasil] Re: Executar View Através do Caminho/Nome
>
> talvez o get_absolute_url seja uma opcao.
>
> --
> Gustavo Henrique
> blog.gustavohenrique.net
>
>       ____________________________________________________________________________________
> Veja quais são os assuntos do momento no Yahoo! +Buscadoshttp://br.maisbuscados.yahoo.com

marcos thomaz

unread,
Nov 23, 2009, 9:19:50 AM11/23/09
to django...@googlegroups.com
Taí... não tinha pensado nisso. Vou tentar aqui. O problema é que, a cada nova inserção no modelo, eu teria que restartar a aplicação.

[]'s 

Marcos Thomaz



De: Mateus Lorandi <mco...@gmail.com>
Para: Django Brasil <django...@googlegroups.com>
Enviadas: Segunda-feira, 23 de Novembro de 2009 11:18:39
Assunto: Re: Res: [django-brasil] Re: Executar View Através do Caminho/Nome
style="position:fixed">

Diego Albuquerque

unread,
Nov 23, 2009, 10:39:36 AM11/23/09
to django...@googlegroups.com
Não tem como você criar um modelo para geração das urls e ai colocar uma expressão regular que case com o modelo ?

OU ainda algo do tipo ...

o que tiver /view/<qualquer_coisa_aqui_como_o_Nome_da_view  , manda para a função captura_view.

A função em si , lê do banco de dados a partir do nome e entrega a view desejada.



2009/11/23 marcos thomaz <marcos...@yahoo.com.br>

marcos thomaz

unread,
Nov 23, 2009, 1:44:26 PM11/23/09
to django...@googlegroups.com
Isso teria como fazer (na verdade foi minha primeira idéia), porém, não sei como fazer para retornar a função, visto que pode estar em apps diferentes.


De: Diego Albuquerque <diegoalb...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Segunda-feira, 23 de Novembro de 2009 13:39:36

Mateus Lorandi

unread,
Nov 24, 2009, 8:06:26 AM11/24/09
to Django Brasil
Eu estou tentando pensar emuma solução mais apropriada, mas enquanto
isso tive uma outra idéia!

Se além de você fizer o código que citei anteriormente você criar uma
signal no post_save do model Reports que concatena a url e a view no
urlpatterns.

def reports_post_save(sender, instance, **kargs):
from urls import urlpatterns
urlpatterns += pattern('',
(instance.url, instance.view),
)

Talvez isso possa funcionar até que haja uma solução mais adequada.
Estou tentando achar uma solução com base na sua primeira idéia de
criar uma view genérica que execute outras views com base na url.

On 23 nov, 12:19, marcos thomaz <marcosthom...@yahoo.com.br> wrote:
> Taí... não tinha pensado nisso. Vou tentar aqui. O problema é que, a cada nova inserção no modelo, eu teria que restartar a aplicação.
>
> []'s
>
> Marcos Thomaz
>
> ________________________________
> De: Mateus Lorandi <mcom...@gmail.com>

Mateus Lorandi

unread,
Nov 24, 2009, 10:16:01 AM11/24/09
to Django Brasil
Consegui fazer uma app que faz o que você quer utilizando uma view,
como na sua primeira idéia.
Eu adicionei ela no meu repositório:
http://bitbucket.org/comogo/django_dynamic_urls/

Não deu tempo de comentar o código, mas basta adicionar a app no seu
projeto e adicionar ela no na lista de apps do settings.py. Só fiz 2
testes também, mas deu certo.
Da uma olhada como ela funciona pra ver se é isso que você precisa.

Abraço!

marcos thomaz

unread,
Nov 24, 2009, 10:23:54 AM11/24/09
to django...@googlegroups.com
Mateus, acabei de testar aqui, e funcionou beleza. Muito obrigado mesmo! 
Ficou show.

[]'s

Marcos Thomaz


De: Mateus Lorandi <mco...@gmail.com>
Para: Django Brasil <django...@googlegroups.com>
Enviadas: Terça-feira, 24 de Novembro de 2009 13:16:01
Assunto: Re: Res: Res: [django-brasil] Re: Executar View Através do Caminho/Nome

Mateus Lorandi

unread,
Nov 24, 2009, 11:21:02 AM11/24/09
to Django Brasil
Acabei de arrumar uns bugs, adicionar alguns testes e um exemplo
também.

On 24 nov, 13:23, marcos thomaz <marcosthom...@yahoo.com.br> wrote:
> Mateus, acabei de testar aqui, e funcionou beleza. Muito obrigado mesmo!
> Ficou show.
>
> []'s
>
> Marcos Thomaz
>
> ________________________________
Reply all
Reply to author
Forward
0 new messages