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 作为函数签名中参数的默认值。