为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2022-10-18 16:07:37
我正在学习 Django。在教程中它说:path()函数传递了四个参数,两个是必需的:route和view ,两个是可选的: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()在这里使用?如果有人可以提供帮助,我将不胜感激。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

文件说_

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().')

您会看到它只是检查参数类型并根据它是元组还是可调用对象执行不同的操作。


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信