如何在 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 中生成随机数

如何在 Django 模板中生成换行符

如何在 Django REST Swagger 中生成响应消息列表?

如何在登录过程中生成rest_framework_jwt token

如何在列表中生成动态 url?