为什么我们将template_name = None作为类变量?(来自django源代码)
这是因为如果self.template_name为None,会引发错误吗?
(self.template_name将查找实例变量,如果不存在,则返回类变量)
如果是这样,拥有def __init__(self): self.template_name = None ?
class TemplateResponseMixin(object):
"""
A mixin that can be used to render a template.
"""
template_name = None
response_class = TemplateResponse
def render_to_response(self, context, **response_kwargs):
"""
Returns a response with a template rendered with the given context.
"""
return self.response_class(
request = self.request,
template = self.get_template_names(),
context = context,
**response_kwargs
)
def get_template_names(self):
"""
Returns a list of template names to be used for the request. Must return
a list. May not be called if render_to_response is overridden.
"""
if self.template_name is None:
raise ImproperlyConfigured(
"TemplateResponseMixin requires either a definition of "
"'template_name' or an implementation of 'get_template_names()'")
else:
return [self.template_name]
答案 0 :(得分:0)
TemplateResponseMixin是一个不使用init的mixin,可以更容易地使用多个继承。它不需要自己的状态,因此它不需要构造函数。这也使继承更容易,因为您不需要在子类中调用构造函数。
由于没有构造函数,template_name显然被设置为类实例。它意味着它应该从子类中设置。此外,更改它的值将影响该mixin的所有未来实例。