在 Django 的模板语言中,您可以使用{% url [viewname] [args] %}
参数生成指向特定视图的 URL。您如何以编程方式在 Python 代码中执行相同的操作?
我需要的是创建一个菜单项列表,其中每个项都有名称、URL 和一个活动标志(无论它是否是当前页面)。这是因为在 Python 中执行此操作会比模板语言更简洁。
在 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/
在此编辑时,导入是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)])
请注意,使用reverse()
要求您的 urlconf 模块 100% 没有错误并且可以处理 - iow 没有ViewDoesNotExist
错误左右,或者您会遇到可怕的NoReverseMatch
异常(模板中的错误通常会默默地失败,导致None
.
对于 Python3 和 Django 2:
from django.urls import reverse
url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})