Django中from django.shortcuts import render导入语法的点号含义疑问
from django.shortcuts import render中点号的路径指代逻辑 Python导入语法里的点号只用来分隔模块的层级关系,本身不会区分后面跟着的是单文件模块还是包目录,解析时会按固定规则自动匹配目标。落到这句Django的导入语句上,实际指向非常明确:
django.shortcuts对应的不是django目录下的shortcuts.py单文件,而是django目录下名为shortcuts的包目录- 导入的
render也不是shortcuts目录下的render.py文件,而是定义在shortcuts包的__init__.py文件里的视图渲染函数,是包初始化时对外暴露的可调用成员
Python导入的通用匹配规则
Python解析from x.y import z格式的语句时,会按优先级依次找匹配的目标:
- 先在
x对应的路径下找名为y.py的单文件模块,找到后就在这个文件的全局作用域里找名为z的成员 - 如果没找到
y.py,就找x路径下名为y的目录(也就是包):如果目录里有__init__.py文件,会先加载这个初始化文件,再从文件内容里找z成员;Python 3.3+版本就算目录里没有__init__.py(也就是隐式命名空间包),也会继续在这个目录的子模块里匹配z对应的实体
如果想自己验证,直接打开Python交互环境跑下面两行代码就行,会直接打印出模块的实际存储路径:
import django.shortcuts print(django.shortcuts.__file__)
输出的路径会指向shortcuts目录下的__init__.py文件,一眼就能看清它的实体结构。
内容的提问来源于stack exchange,提问作者jarjarbinks99
相关产品推荐
相关产品推荐

