URL externa pelo url patterns

93 views
Skip to first unread message

Hernani Fernandes

unread,
May 25, 2012, 9:46:31 AM5/25/12
to Django Brasil
Olá pessoal,
alguém sabe como poderia criar um redirecionamento externo usando o
url patterns?
ex:

no template colocar algo como

{% url contato %} <- assim toda vez que eu usar isso no template

no urlpatterns teria algo como

url (r'^http://www.google.com.br/$', 'contato',) <- ele substitui por
isso www.google.....

é bem estranho e provavelmente não exista, mas qual o mais próximo
disso?
Obrigado.

Henrique Bastos

unread,
May 25, 2012, 9:59:26 AM5/25/12
to django...@googlegroups.com, Django Brasil
Dê uma olhada em namespaces: https://docs.djangoproject.com/en/dev/topics/http/urls/#defining-url-namespaces

[]'s,
--
Henrique Bastos
+55 21 9618-6180
Twitter: henriquebastos
--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Vinicius Mendes

unread,
May 26, 2012, 12:03:25 AM5/26/12
to django...@googlegroups.com
O url patterns foi feito para mapear rotas dentro da sua aplicação para que ela saiba que código executar ao receber uma requisição em determinada URL. Ele não foi feito para fazer redirects externos.

Para isso existe o shortcut redirect [1], a generic view RedirectView [2] e as classes HttpResponseRedirect (HTTP 302) [3] e HttpResponsePermanentRedirect (HTTP 301) [4].

Se o que você quer é retornar uma URL externa ao chamar {% url contato %}, o seu problema não é no url patterns e sim na template tag que você está utilizando. Talvez fazer uma outra template tag que resolva seu problema seja melhor.

Matheus Lima

unread,
May 26, 2012, 2:57:07 AM5/26/12
to django...@googlegroups.com
Você pode mapear uma url pra uma view que te redireciona pro link externo. Eeria uma url normal, apontando pra uma view. Nessa view você faz o redirect.

Att,

Matheus dos Santos Lima        
Bel. em Sistemas de Informação - UFS (2011.2)

Vinicius Mendes

unread,
May 26, 2012, 7:55:27 AM5/26/12
to django...@googlegroups.com
Se fizer uma view só pra fazer o redirect, você tá piorando a experiência do usuário e sobrecarregando seu servidor desnecessariamente. Toda vez que o usuário clicar no link, ele vai esperar seu servidor responder falando que é um redirect para poder requisitar a url correta. A não ser que você tenha algum outro bom motivo para ter essa view, é melhor não fazê-la.

Atenciosamente,
Vinicius Mendes
Engenheiro de Computação
Globo.com



2012/5/26 Matheus Lima <mathe...@gmail.com>

Douglas Miranda

unread,
May 26, 2012, 1:38:13 PM5/26/12
to django...@googlegroups.com
Há algo que lhe impede de colocar direto no template isto? <a href="http://google.com.br"..

Matheus Lima

unread,
May 26, 2012, 3:05:54 PM5/26/12
to django...@googlegroups.com
A melhor forma seria o link direto, uma outra opção seria o direcionamento pelo dominio mesmo. Mas ele quer poder usar a templatetag 'url', nenhuma dessas duas soluções vai permitir.

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Henrique Bastos

unread,
May 27, 2012, 7:29:54 AM5/27/12
to django...@googlegroups.com
Opa!

Posso estar equivocado, mas estou com a sensação de que ele deseja ter um "banco de links" que podem mudar com certa frequência. Talvez o exemplo do google.com tenha sido genérico d+.

Se esse for o caso, o que já vi acontecer em CMS onde o usuário deseja ser capaz de atualizar os links, me parece que no contrib do django tem a app redirects que pode servir de inspiração, apesar de não parecer ser exatamente a solução desejada.

Abs,
--
Henrique Bastos

Aprenda Python e Django na Prática!

+55 21 9618-6180



2012/5/26 Matheus Lima <mathe...@gmail.com>

Gileno Alves

unread,
May 28, 2012, 8:56:27 PM5/28/12
to django...@googlegroups.com
Concordo com Henrique,

também acho que seja isso que ele deseja e na verdade para não ter que atualizar manualmente a url nos templates prefere chamar via uma templatetag.

Uma solução seria criar outra templatetag para url's externas e adicionar essas urls em um arquivo ou banco de dados, um model que armazenasse um nome para a url e o valor por exemplo e usando as fixtures[1] do django você poderia colocar as urls's

Vinicius Mendes

unread,
May 29, 2012, 10:38:00 AM5/29/12
to django...@googlegroups.com
Pelo que eu entendi, o que ele quer é criar um alias para um determinado link de forma que ele possa trocar o link sem precisar substituir em todos os lugares que ele foi utilizado. Se a intenção for essa, uma template tag que receba como parametro uma chave para distinguir o link e obtenha o link de um mapeamento resolve o problema. Se existir demanda de alimentar o mapeamento através de um CMS, faz sentido utilizar a app de redirects. Mas lembre-se, como o Douglas e o Matheus sugeriram, a não ser que você realmente tenha essas demandas que mencionei acima, a melhor solução é utilizar o link diretamente.

Atenciosamente,
Vinicius Mendes
Engenheiro de Computação
Globo.com



2012/5/28 Gileno Alves <gasc...@gmail.com>

Jayson Reis

unread,
May 29, 2012, 10:42:58 AM5/29/12
to django...@googlegroups.com
Você pode fazer assim.
from django.views.generic import RedirectView

url(r'^google/?$', RedirectView.as_view(url='http://google.com.br'), name='contato')

e usar normalmente com {% url contato %}
Jayson Reis


2012/5/25 Hernani Fernandes <hern...@gmail.com>

Hernani Fernandes

unread,
May 29, 2012, 12:01:26 PM5/29/12
to Django Brasil
galera, vocês são fodas! valeu a todos !

On 29 maio, 11:42, Jayson Reis <santosdosr...@gmail.com> wrote:
> Você pode fazer assim.
> from django.views.generic import RedirectView
>
> url(r'^google/?$', RedirectView.as_view(url='http://google.com.br'),
> name='contato')
>
> e usar normalmente com {% url contato %}
> Jayson Reis
>
> 2012/5/25 Hernani Fernandes <hernan...@gmail.com>
Reply all
Reply to author
Forward
0 new messages