如何在Django中生成网址

38 投票
4 回答
42175 浏览
提问于 2025-04-10 23:53

在Django的模板语言中,你可以使用{% url [viewname] [args] %}来生成一个指向特定视图的URL,并且可以带上参数。那么在Python代码中,怎么才能做到这一点呢?

我需要创建一个菜单项的列表,每个菜单项都有名称、URL和一个激活标志(表示它是否是当前页面)。这样在Python中处理会比在模板语言中更简洁。

4 个回答

6

适用于Python3和Django 2:

from django.urls import reverse

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

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

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

撰写回答