Django 使用 include() 作为 path() 参数

我正在学习 Django。

教程中它说:

path()函数传递了四个参数,两个是必需的:routeview 两个是可选的:kwargs 和 name。在这一点上,值得回顾一下这些论点的用途。

path() 参数:视图

当 Django 找到匹配的模式时,它会调用指定的视图函数,并将 HttpRequest 对象作为第一个参数,并将路由中任何“捕获”的值作为关键字参数。我们稍后会给出一个例子。

在我看来, theview是一个以 aHttpRequest作为参数并返回 a的函数HttpResponse

但是 in mysite/urls.pythepath()是这样使用path("polls/", include("polls.urls"))的,并且该inclue方法返回一个元组(urlconf_module, app_name, namespace),而不是一个函数。

为什么可以include()在这里使用?

如果有人可以提供帮助,我将不胜感激。


catspeake
浏览 221回答 1
1回答

jeck猫

文件说_view 参数是一个视图函数或 as_view() 对于基于类的视图的结果。它也可以是 django.urls.include()。如果您查看源代码,def _path(route, view, kwargs=None, name=None, Pattern=None):    if isinstance(view, (list, tuple)):        # For include(...) processing.        pattern = Pattern(route, is_endpoint=False)        urlconf_module, app_name, namespace = view        return URLResolver(            pattern,            urlconf_module,            kwargs,            app_name=app_name,            namespace=namespace,        )    elif callable(view):        pattern = Pattern(route, name=name, is_endpoint=True)        return URLPattern(pattern, view, kwargs, name)    else:        raise TypeError('view must be a callable or a list/tuple in the case of include().')您会看到它只是检查参数类型并根据它是元组还是可调用对象执行不同的操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python