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.

Foi útil?

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)

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

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top