Django 中的 reverse 和 reverse_lazey 方法有什么区别?
what is the differences between reverse and reverse_lazey methods in Django?
我无法在 class 中使用 reverse() 方法生成 url
例如,reverse() 在通用视图或 Feed classes 中不起作用(应该改用 reverse_lazy())
但我可以在函数中使用 reverse()。有什么区别?
看看以下内容:
class LatestPostFeed(Feed):
title = 'My Django blog'
# link = reverse_lazy('blog:index')
description = 'New posts of my blog'
def items(self):
return models.Post.published.all()[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return truncatewords(item.body, 30)
def link(self):
return reverse('blog:index')
上面的 link 属性只适用于 reverse_lazy() 方法。
但是 link 函数适用于 reverse_lazy() 和 reverse() 方法
reverse returns string
它类似于 url 模板标签 ,它使用将命名空间 url 转换为真正的 url 模式。
reverse_lazy returns object
这是一个 reverse()
函数的 惰性版本.防止 URLConf 未加载时出现错误。通常我们在以下情况下使用此功能:
- 提供反向 URL 作为基于 class 的通用视图的
url
属性。
- 向装饰器提供反向 URL(例如
django.contrib.auth.decorators.permission_required()
装饰器的 login_url
参数)
- 提供反向 URL 作为函数签名中参数的默认值。
我无法在 class 中使用 reverse() 方法生成 url
例如,reverse() 在通用视图或 Feed classes 中不起作用(应该改用 reverse_lazy())
但我可以在函数中使用 reverse()。有什么区别?
看看以下内容:
class LatestPostFeed(Feed):
title = 'My Django blog'
# link = reverse_lazy('blog:index')
description = 'New posts of my blog'
def items(self):
return models.Post.published.all()[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return truncatewords(item.body, 30)
def link(self):
return reverse('blog:index')
上面的 link 属性只适用于 reverse_lazy() 方法。 但是 link 函数适用于 reverse_lazy() 和 reverse() 方法
reverse returns string
它类似于 url 模板标签 ,它使用将命名空间 url 转换为真正的 url 模式。
reverse_lazy returns object
这是一个 reverse()
函数的 惰性版本.防止 URLConf 未加载时出现错误。通常我们在以下情况下使用此功能:
- 提供反向 URL 作为基于 class 的通用视图的
url
属性。 - 向装饰器提供反向 URL(例如
django.contrib.auth.decorators.permission_required()
装饰器的login_url
参数) - 提供反向 URL 作为函数签名中参数的默认值。