如何在 django 中生成 url
Posted
技术标签:
【中文标题】如何在 django 中生成 url【英文标题】:How to generate urls in django 【发布时间】:2010-09-07 18:46:27 【问题描述】:在 Django 的模板语言中,您可以使用% url [viewname] [args] %
生成带有参数的特定视图的 URL。您如何以编程方式在 Python 代码中执行相同的操作?
我需要创建一个菜单项列表,其中每个项都有名称、URL 和一个活动标志(无论它是否是当前页面)。这是因为在 Python 中执行此操作会比模板语言更简洁。
【问题讨论】:
【参考方案1】:如果您需要在代码中使用类似于% 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
【讨论】:
【参考方案2】:我在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)])
【讨论】:
这和使用装饰器一样吗? @models.permalink【参考方案3】:请注意,使用 reverse()
要求您的 urlconf 模块 100% 没有错误并且可以处理 - iow 没有 ViewDoesNotExist
错误左右,或者您会遇到可怕的 NoReverseMatch
异常(模板中的错误通常会默默地失败导致None
)。
【讨论】:
【参考方案4】:对于 Python3 和 Django 2:
from django.urls import reverse
url = reverse('my_app:endpoint', kwargs='arg1': arg_1)
【讨论】:
以上是关于如何在 django 中生成 url的主要内容,如果未能解决你的问题,请参考以下文章
在视图而不是模板中生成带有 Django 静态 url 的图像标签
如何在 Django REST Swagger 中生成响应消息列表?