如何在Django中生成网址
在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