34

在 Django 的模板语言中,您可以使用{% url [viewname] [args] %}参数生成指向特定视图的 URL。您如何以编程方式在 Python 代码中执行相同的操作?

我需要的是创建一个菜单项列表,其中每个项都有名称、URL 和一个活动标志(无论它是否是当前页面)。这是因为在 Python 中执行此操作会比模板语言更简洁。

4

4 回答 4

41

如果你需要在代码中使用类似于{% 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

于 2008-09-04T07:54:57.923 回答
10

我在我的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)])
于 2008-09-11T03:05:27.200 回答
4

请注意,使用reverse()要求您的 urlconf 模块 100% 没有错误并且可以处理 - iow 没有ViewDoesNotExist错误左右,或者您会遇到可怕的NoReverseMatch异常(模板中的错误通常会默默地失败,导致None.

于 2008-09-16T13:36:56.580 回答
4

对于 Python3 和 Django 2:

from django.urls import reverse

url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})
于 2019-07-22T18:15:40.900 回答