相关部分或 django.template.backends.base.py 如下:
class BaseEngine(object):
# Core methods: engines have to provide their own implementation
# (except for from_string which is optional).
def __init__(self, params):
"""
Initializes the template engine.
Receives the configuration settings as a dict.
"""
params = params.copy()
self.name = params.pop('NAME')
self.dirs = list(params.pop('DIRS'))
self.app_dirs = bool(params.pop('APP_DIRS'))
if params:
raise ImproperlyConfigured(
"Unknown parameters: {}".format(", ".join(params)))
def __init__(self, params):
中,字典params
将被复制到一个新的字典params = params.copy()
中。它只是使用相同的名称。因此,旧对象不能再通过这个名称访问。在接下来的步骤中,修改了新的本地字典,但原始的字典保持不变。self.params = params
而不是params = params.copy()
,将会产生非常不同的效果。在这种情况下,self.params
将只是params
后面的对象的第二个名称。由于它是可变的字典,对self.params
的所有更改都会影响params
。params.pop('NAME')
从字典中删除键NAME'
。实际上,有一个检查它是否为空:params.pop('NAME')
。
self.params = params
呢? - Heartagramir