Pregunta

En el lenguaje de plantilla de Django, puedes usar {% url [viewname] [args] %} para generar una URL a una vista específica con parámetros.¿Cómo se puede hacer lo mismo mediante programación en el código Python?

Lo que necesito es crear una lista de elementos del menú donde cada elemento tenga un nombre, una URL y una bandera activa (ya sea la página actual o no).Esto se debe a que será mucho más limpio hacer esto en Python que en el lenguaje de plantilla.

¿Fue útil?

Solución

Si necesita utilizar algo similar a {% url %} etiqueta de plantilla en su código, Django proporciona la django.core.urlresolvers.reverse().El reverse La función tiene la siguiente firma:

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

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

Otros consejos

Estoy usando dos enfoques diferentes en mi models.py.El primero es el permalink decorador:

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)

También puedes llamar reverse directamente:

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

Tenga en cuenta que usar reverse() requiere que su módulo urlconf esté 100% libre de errores y pueda procesarse - iow no ViewDoesNotExist errores más o menos, o obtienes el temido NoReverseMatch excepción (los errores en las plantillas generalmente fallan silenciosamente, lo que resulta en None).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top