Как генерировать URL-адреса в django

в язык шаблонов Django, вы можете использовать {% url [viewname] [args] %} для создания URL-адреса определенного представления с параметрами. Как можно программно сделать то же самое в Python код?

Мне нужно создать список пунктов меню, где каждый элемент имеет имя, URL и активный флаг (будь то текущая страница или нет). Это потому, что это будет намного чище, чтобы сделать это на Python, чем язык шаблонов.

3 ответов


Если вам нужно использовать что-то похожее на {% url %} тег шаблона в вашем коде, Django предоставляет django.core.urlresolvers.reverse(). The reverse функция имеет следующую подпись:

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

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


я использую два разных подхода в моем models.py. Первый-это permalink оформитель:

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)

вы также можете позвонить reverse напрямую:

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

имейте в виду, что с помощью reverse() требует, чтобы ваш модуль urlconf был 100% без ошибок и мог быть обработан - iow no ViewDoesNotExist ошибки или так, или вы получите страшный NoReverseMatch исключение (ошибки в шаблонах обычно терпят неудачу, что приводит к None).