Como gerar urls no django
-
09-06-2019 - |
Pergunta
Em Django modelo de idioma, você pode usar {% url [viewname] [args] %}
para gerar uma URL para um modo de exibição específico com parâmetros.Como você pode programaticamente fazer o mesmo em Python?
O que eu preciso é criar uma lista de itens de menu, onde cada item tem nome, URL, e uma ativa o sinalizador (se é a página atual ou não).Isso é porque ele vai ser um monte de limpeza para fazer isso em Python do que o modelo de linguagem.
Solução
Se você precisa usar algo semelhante ao {% url %}
modelo tag no código, o Django fornece o django.core.urlresolvers.reverse()
.O reverse
a função tem a seguinte assinatura:
reverse(viewname, urlconf=None, args=None, kwargs=None)
Outras dicas
Eu estou usando duas abordagens diferentes na minha models.py
.O primeiro é o permalink
decorator:
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 chamar reverse
diretamente:
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)])
Estar ciente de que a utilização reverse()
requer que o seu urlconf módulo é 100% livre de erros e que podem ser processados - iow não ViewDoesNotExist
erros ou isso, ou você começa a temida NoReverseMatch
exceção (erros em modelos geralmente falham silenciosamente, resultando em None
).