我刚开始学习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:
的一些逻辑。因此,它将首先做一些预处理,其中对于2元组,它将将其解包为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)
urconf_module
和app_name
,然后使用import_module(…)
函数[Python-doc]导入给定限定名的模块。
然后进行一些后处理,目的是从该模块获得'urlpatterns
和app_name
,并最终返回一个包含模块、app_name
和namespace
的3元组。