我正在尝试围绕 Django 概念进行思考,但我对 URLResolver reverse_lazy() 感到困惑。据我所知,当我想反向到尚未加载的URL时,我必须使用reverse_lazy()。所以当我创建一个 CBV 并声明一个 success_url 时,我使用了 reversy_lazy。这意味着文件执行时不会导入 url。
这让我感到困惑,因为我认为服务器在执行任何操作之前启动时会加载所有 URL。那么为什么 URL 没有在执行时加载呢?
如果有人能给我一个答案,我会很高兴。
嗯,首先,URL 解析器本身是惰性的,所以加载发生在第一次调用resolve()or 时reverse()(通常在第一次请求时)。但这在这种情况下并不重要。
当 URL 解析器被初始化时,它会导入您的 URL 配置,进而导入您的视图。因此,在您导入并success_url设置视图时,解析器仅进行了一半的初始化。此时调用reverse()将不起作用,因为解析器还没有反转视图名称的所有信息。