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

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
32
0
33 219
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

На момент редактирования это импорт django.urls import reverse.

В моем 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)])

Это то же самое, что использовать декоратор? @ models.permalink

Sam Stoelinga 21.10.2010 18:44

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

Для Python3 и Django 2:

from django.urls import reverse

url = reverse('my_app:endpoint', kwargs = {'arg1': arg_1})

Другие вопросы по теме