繁体   English   中英

如何在django中生成网址

[英]How to generate urls in django

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

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

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

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

对于 Python3 和 Django 2:

from django.urls import reverse

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

请注意,使用reverse()要求您的 urlconf 模块 100% 无错误并且可以进行处理 - 没有ViewDoesNotExist错误等,否则您会遇到可怕的NoReverseMatch异常(模板中的错误通常会静默失败,导致None )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM