quarta-feira, 26 de setembro de 2012

Django - Como obter a URL atual

Este é mais um post rápido. Porém, sobre uma coisa que sempre procurei por aí e nunca encontrei uma boa resposta. Sempre tinha que fazer alguma gambiarra. Mas esses tempos negros se foram. Finalmente, sem querer, encontrei a resposta para essa pergunta. É claro que também vou listar as soluções gambiarrentas, pois nunca se sabe quando uma delas pode vir a ser útil.

Gambiarras

Esta é uma solução bem simples. Nem é bem uma gambiarra. É só definir uma variável no settings.py, costumo definir uma BASE_SITE_URL, a qual depois importo na view para acrescentar a url que precisa do endereço completo. Por exemplo, no template de um email.

Outra solução era recuperar o endereço base via ajax e salvar no banco de dados utilizando a aplicação Sites do Django, por exemplo. Sim, esta solução foi a primeira que utilizei. Ainda bem que faz tempo que não a uso mais. Coisas porquíssimas que fazemos quando estamos aprendendo a usar uma ferramenta nova, porém era muito funcional e ainda não precisava de ajustes ao mudar o endereço do site. Porém, a primeira é muito mais simples e prática de ser aplicada.

Como obter a URL atual

Esses dias descobri ao acaso um método do objeto HttpRequest que eu desconhecia completamente. Que junto com o método get_full_path(), resolve o problema de obter a url atual de forma bem fácil.
O método get_full_path() devolve "metade" do endereço da página, ou melhor, devolve o endereço da sua página sem o domínio. Por exemplo, se o endereço for http://www.site_exemplo.com.br/bla/ble/bli/ usar o request.get_full_path() em sua view retorna /bla/ble/bli/.
A grande questão era como obter a parte http://www.site_exemplo.com.br . Como fazer isso?
Simples, é só utilizar o método build_absolute_uri() do objeto request de sua view. Pronto! Problema resolvido. ;)

No próximo post vou falar sobre como transformar um valor como esse numa variável "global" utilizando processadores de contexto.




Nenhum comentário: