如何在Django中生成URL

时间:2020-03-05 18:47:29  来源:igfitidea点击:

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

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

解决方案

回答

如果我们需要在代码中使用类似于{{%url%}}模板标签的内容,则Django提供了django.core.urlresolvers.reverse()。反向功能具有以下特征:

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

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

回答

我在我的models.py中使用了两种不同的方法。第一个是"永久链接"装饰器:

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%无错误的,并且可以在没有ViewDoesNotExist错误的情况下进行处理,否则我们会收到可怕的NoReverseMatch异常(模板中的错误通常会失败,从而导致"无")。