Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 反向和反向的区别?_Python_Django - Fatal编程技术网

Python 反向和反向的区别?

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之前加载。因此,这意味

我在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
之前加载。因此,这意味着如果在类级别或类似于
@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解析的方法。谢谢,伙计。我知道它是怎么工作的