如何在django中生成网址

时间:2008-09-04 07:36:39

标签: python django url django-urls

在Django的模板语言中,您可以使用{% url [viewname] [args] %}生成带有参数的特定视图的URL。你怎么能以编程方式在Python代码中做同样的事情呢?

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

4 个答案:

答案 0 :(得分:34)

如果您需要在代码中使用与{% url %}模板标记类似的内容,Django会提供django.core.urlresolvers.reverse()reverse函数具有以下签名:

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

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

答案 1 :(得分:9)

我在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)])

答案 2 :(得分:4)

请注意,使用reverse()要求您的urlconf模块100%无错误并且可以处理 - 不会出现ViewDoesNotExist错误,或者您会遇到可怕的NoReverseMatch异常(模板中的错误通常会无声地失败,从而导致None)。

答案 3 :(得分:0)

对于Python3和Dajango 2:

AudioManager