Como gerar urls em django

votos
24

Em linguagem de templates do Django, você pode usar {% url [viewname] [args] %}para gerar uma URL para uma visão específica com parâmetros. Como você pode programaticamente fazer o mesmo no código Python?

O que eu preciso é criar uma lista de itens de menu, onde cada item tem nome, URL, e uma bandeira ativa (se é a página atual ou não). Isso é porque ele será muito mais limpa de fazer isso em Python que o modelo de linguagem.

Publicado 04/09/2008 em 08:36
fonte usuário
Em outras línguas...                            


4 respostas

votos
34

Se você precisa usar algo semelhante ao {% url %}tag no seu código, Django fornece a django.core.urlresolvers.reverse(). A reversefunção tem a seguinte assinatura:

reverse(viewname, urlconf=None, args=None, kwargs=None)

https://docs.djangoproject.com/en/dev/ref/urlresolvers/

Respondeu 04/09/2008 em 08:54
fonte usuário

votos
8

Estou usando duas abordagens diferentes em minha models.py. O primeiro é o permalinkdecorador:

from django.db.models import permalink

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)

Você também pode ligar reversediretamente:

from django.core.urlresolvers import reverse

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return reverse('project.app.views.view_name', None, [str(self.id)])
Respondeu 11/09/2008 em 04:05
fonte usuário

votos
4

Esteja ciente de que o uso reverse()requer que o módulo urlconf é 100% livre de erros e pode ser processado - iow há ViewDoesNotExisterros ou assim, ou você começa a temida NoReverseMatchexceção (erros nos modelos costumam falhar silenciosamente resultando em None).

Respondeu 16/09/2008 em 14:36
fonte usuário

votos
0

Para Python3 e Dajango 2:

from django.urls import reverse

url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})
Respondeu 22/07/2019 em 21:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more