gpt4 book ai didi

python - 我什么时候应该在 Django 中使用惰性函数

转载 作者:行者123 更新时间:2023-12-04 15:18:17 25 4
gpt4 key购买 nike

我从 django 开始,我遇到过像 reverse_lazy 而不是 reverse 和 gettext_lazy 而不是 gettext 的翻译功能。从网上查的资料来看,好像这些惰性函数只是在要用的时候才调用原函数,并没有马上声明。这到底是什么意思,在现实生活中,我应该使用惰性版本而不是原始功能。

提前致谢

最佳答案

正如您自己的直觉,这是一种只在特定情况下才需要的东西。

一个常见的例子是基于通用类的 View 。读取 views.py 文件时会评估 View 的属性。但是在它被读取的时候,urls 文件还没有被读取!因此,使用 reverse() 分配给属性将失败,因为在发送给 reverse() 的参数中命名的任何 url 将不可用于 View 文件。但是使用 reverse_lazy(),你可以在基于类的 View 中将一个 url 分配给一个属性,并且在命名的 url 实际可用之前它不会被更新:

class RegisterView(CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('index') # reverse() would fail here!
template_name = 'registration/register.html')

再次声明:success_url 是 View 的一个属性,将在读取 views.py 文件时进行评估。但那时,url 还没有被读取,所以 'index',一个命名的 url,还不可用。我们使用 reverse_lazy() 而不是 reverse() 来解决这个问题; 'index' 在实际需要之前不会被评估,现在我们可以根据需要定义我们的属性。

请注意,如果您的 View 有一个用户定义的方法,您可以在方法内部使用正常的 reverse() 调用,如果需要的话,因为与 View 属性不同, View 的方法只有在显式调用该方法后才会被评估——届时,网址将可用。

当然还有其他用例,但 CBV 是一个常见的用例,其中 reverse_lazy() 变得必要,特别是在将 url 分配给属性时。

关于python - 我什么时候应该在 Django 中使用惰性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63924961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com