django 구조 방울방울

2495 단어 django
선언:
드문드문 발견하고 드문드문 기록하기 때문에 전체적으로 혼란스러울 수 있다. 왜냐하면 분명히 단숨에 쓴 것이 아니기 때문이다.
 
CBV 정보:
먼저 cbv의 전체적인 계승 구조는 정말 아름답지 않다고 말했다여기..
좋아, 하지만 나누어 보면 그래도 틀림없어.
1. 예를 들어 SingleTemplate ResponseMixin, 속성templatename_field(문서를 뒤적거리는 것을 별로 좋아하지 않아서 한 단락의 문서를 다 보는 시간에 많은 코드를 볼 수 있고 여러 페이지의 문서를 볼 수 있다. 만약 공통점이 있다면 우연한 일치이다.)
봐봐 gettemplate_names, 이것이야말로 이 종류의 목적입니다. 템플릿 이름과 경로 논리를 다시 쓰는 것입니다.(원본 코드의 주석이 비교적 많기 때문에 삭제했다. 간략판은 다음과 같다)
class SingleObjectTemplateResponseMixin(TemplateResponseMixin):

    template_name_field = None

    template_name_suffix = '_detail'



    def get_template_names(self):

        try:

            names = super(SingleObjectTemplateResponseMixin, self).get_template_names()

        except ImproperlyConfigured:

            names = []

            

            if self.object and self.template_name_field:

                name = getattr(self.object, self.template_name_field, None)

                if name:

                    names.insert(0, name)



            if isinstance(self.object, models.Model):

                names.append("%s/%s%s.html" % (

                    self.object._meta.app_label,

                    self.object._meta.model_name,

                    self.template_name_suffix

                ))

            elif hasattr(self, 'model') and self.model is not None and issubclass(self.model, models.Model):

                names.append("%s/%s%s.html" % (

                    self.model._meta.app_label,

                    self.model._meta.model_name,

                    self.template_name_suffix

                ))



            if not names:

                raise



        return names


11~14줄을 주의하십시오. 이 필드를 정의하면 대상에서 이 필드의 값을 꺼냅니다.
이것은 모든 데이터 줄에 대해 독특한 템플릿을 사용할 수 있다는 것을 의미한다.상상해 보아라, 매 문장마다 자신만의 주제가 있다!좋아, 정말 멋진 디자인이야.
여기에 이름을 남기다.
 
2. 템플릿 렌더링 정보네가 django를 쓰든 말든.shortcuts.render/render_to_response는 Template Response Mixin의render를 사용합니다. 마지막으로 호출된render는 settings에서 정의한templateloaders의 loader의render 방법입니다.
좋아, 대단해. 우리는 어디에서 템플릿을 찾든지, 이template를 정의하든지loaders(대문자로 쓰세요)는 렌더링 메커니즘을 해결할 수 있습니다.상세한 코드는 관련 내용이 너무 많기 때문에 여기에 분석을 열거하지 않습니다.
 
셋째, 이것은django와 무관하고python과 관련이 있습니다.python의 발견dict__아주 큰 문장이 있는데, 그야말로 못하는 것이 없다. 그래, 여기는 물이 매우 깊다.간단하게 응용할 수 있는 예를 들면 복숭아의 나뭇가지를 사과나무에 놓고 자라도 복숭아가 자란다.(약간 혼란스럽다).

좋은 웹페이지 즐겨찾기