Python 反向和反向的区别?
我在Django读了更多的项目,但我不明白Python 反向和反向的区别?,python,django,Python,Django,我在Django读了更多的项目,但我不明白 类注册视图(generic.CreateView): form\u class=UserCreationForm 成功\u url=reverse\u lazy('login')) 模板名称='signup.html' 类似于此是一个函数,对于给定的视图名称和参数,它可以构造路径。但是resolve有一个问题:它只能在加载url.py时工作 通常,views.py文件由urls.py导入,这意味着views.py在urls.py之前加载。因此,这意味
类注册视图(generic.CreateView):
form\u class=UserCreationForm
成功\u url=reverse\u lazy('login'))
模板名称='signup.html'
类似于此是一个函数,对于给定的视图名称和参数,它可以构造路径。但是resolve有一个问题:它只能在加载url.py
时工作
通常,views.py
文件由urls.py
导入,这意味着views.py
在urls.py
之前加载。因此,这意味着如果在类级别或类似于@login\u required(login\u url=reverse('view-name'))
的装饰程序中调用reverse(…)
,则在加载文件时会立即对其进行处理。此时,路径尚未定义,因此将出现错误
解决这个问题的办法是推迟评估。这样做。它不是立即对其进行评估,而是简单地存储视图的名称、参数等,并保证以后在必要时调用reverse
例如,如果您有一个视图,其中在函数中调用了reverse
,那么这通常不是问题,当然,除非在加载模块时调用了该函数。例如,我们可以定义一个函数:
from django.urls import reverse
class SignUpView(generic.CreateView):
form_class = UserCreationForm
template_name = 'signup.html'
def get_success_url(self, *args, **kwargs):
return reverse('login')
从django.url反向导入
类注册视图(generic.CreateView):
form\u class=UserCreationForm
模板名称='signup.html'
def get_success_url(self、*args、**kwargs):
返回反向(“登录”)
这是因为只有在调用视图并成功时才会调用here
.get\u success\u url(…)
。加载路径后很长一段时间内会出现这种情况。反向
会立即解决。但是在那一刻,路径
s还没有构建。因此,如果在类级别定义它,它将失败。如果在方法中执行此操作(因此延迟到触发视图,然后加载路径)reverse_lazy
因此是一种推迟URL解析的方法。谢谢,伙计。我知道它是怎么工作的