Python django中reverse和reverse_lazy的区别

Python django中reverse和reverse_lazy的区别,python,django,Python,Django,最近,我在django学习了这个reverse\u lazy函数,但我似乎无法理解reverse和reverse\u lazy函数之间的区别 例如,我有一个用于删除博客帖子的CBV: class BlogDeleteView(DeleteView): model = Post template_name = 'post_delete.html' success_url = reverse_lazy('home.html') 如果我只是写了reverse而不是revers

最近,我在django学习了这个
reverse\u lazy
函数,但我似乎无法理解
reverse
reverse\u lazy
函数之间的区别

例如,我有一个用于删除博客帖子的CBV:

class BlogDeleteView(DeleteView):
    model = Post
    template_name = 'post_delete.html'
    success_url = reverse_lazy('home.html')
如果我只是写了
reverse
而不是
reverse\u lazy
,会有什么不同?我的意思是,这两个函数都将我们重定向到一个url。那么为什么我需要在某些地方使用reverse\u lazy?

使用指定的URL 传递可调用对象

(不鼓励这样做,因为您不能以这种方式反转名称空间视图。) reverse()的延迟计算版本

反向_lazy(viewname,urlconf=None,args=None,kwargs=None,current_app=None) 当您需要在加载项目的URLConf之前使用URL反转时,它非常有用。需要此功能的一些常见情况包括:

提供反向URL作为基于类的通用视图的URL属性。 为decorator提供反向URL(例如django.contrib.auth.decorators.permission\u required()decorator的login\u URL参数)。
为函数签名中的参数提供一个反向URL作为默认值。

惰性函数的计算时间尽可能晚。在这里,一个普通的方法将在类初始化时被评估一次,而一个懒惰的方法将在以后每次使用
success\uurl
时被评估一次。
reverse('news-archive')
reverse_lazy()