Как генерировать 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)
я использую два разных подхода в моем 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
).