0

ここでクラス変数として 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]
4

1 に答える 1

0

TemplateResponseMixin は、複数の継承で使いやすくするために、init を使用しない mixin です。独自の状態は必要ないため、コンストラクターは必要ありません。これにより、サブクラスでコンストラクターを呼び出す必要がないため、継承も容易になります。

コンストラクターがないため、template_name は明らかにクラス インスタンスとして設定されます。サブクラスから設定する必要があることを意味します。また、その値を変更すると、その mixin の将来のすべてのインスタンスに影響します。

于 2013-01-06T05:40:00.457 に答える