Вопрос

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

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

Это было полезно?

Решение

Если вам нужно использовать что-то похожее на {% url %} тег шаблона в вашем коде Django предоставляет django.core.urlresolvers.reverse().Тот Самый 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top