在 django 中,我不明白包含函数是如何工作的



我刚开始学习Django。我不明白include函数怎么知道什么是polls.urls.

我不进口民意调查。url,但它工作!

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

它利用了importlib[Python-doc]导入给定名称的模块。

确实,我们可以检查源代码[GitHub],我们看到它基本上是如何围绕着importlib:

的一些逻辑。
from importlib import import_module

def include(arg, namespace=None): # … if isinstance(urlconf_module, str): urlconf_module =import_module(urlconf_module) patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module) app_name = getattr(urlconf_module, 'app_name', app_name) # … return (urlconf_module, app_name, namespace)

因此,它将首先做一些预处理,其中对于2元组,它将将其解包为urconf_moduleapp_name,然后使用import_module(…)函数[Python-doc]导入给定限定名的模块。

然后进行一些后处理,目的是从该模块获得'urlpatternsapp_name,并最终返回一个包含模块、app_namenamespace的3元组。

最新更新