Django 템플릿은 extends 및 include 태그를 상속합니다.

4671 단어
서: 백엔드를 전혀 모르는 사람에게 바로 Django를 배우는 것은 정말 오리를 쫓아내는 것이다. 다음은 Django 템플릿 시스템의 중요한 하이라이트를 적어 두었다.
1, include 태그
      
템플릿 불러오기 메커니즘을 설명한 후에 이 메커니즘을 이용한 내장 템플릿 탭을 소개합니다: {% include%}.이 탭을 사용하면 (템플릿에) 다른 템플릿의 내용을 포함할 수 있습니다.탭의 매개 변수는 포함할 템플릿 이름입니다. 변수일 수도 있고, 단일/더블 인덱스로 하드코딩된 문자열일 수도 있습니다.여러 템플릿에 같은 코드가 나타날 때마다 중복을 줄이기 위해 {% include%}를 사용해야 하는지 고려해야 합니다.
아래의 두 가지 예는 모두nav를 포함하고 있다.html 템플릿.이 두 가지 예는 등가인데, 그것들은 단일/더블 따옴표가 모두 허용된다는 것을 증명한다.1 { %   include  'nav.html'   % } 2 { %   include  "nav.html"   % }
아래의 예는includes/nav를 포함한다.html 템플릿의 내용:1 { %   include  'includes/nav.html'   % }
다음 예는 변수template 를 포함합니다name 값은 이름의 템플릿 내용입니다.1 { %   include template_name  % }
즉, 불러오는 템플릿 이름은view층에서 정의할 수 있습니다.
gettemplate () 와 마찬가지로 템플릿의 파일 이름을 판단할 때, 호출된 템플릿 이름 앞에 TEMPLATEDIRS의 템플릿 디렉토리입니다.
포함된 템플릿이 실행될 때 context는 템플릿을 포함하는 템플릿과 같습니다.예를 들어 다음 두 개의 템플릿 파일을 고려합니다.01 # mypage.html 02 03 <html> 04 <body> 05 { %   include  "includes/nav.html"   % } 06 <h1>{{ title }}< / h1> 07 < / body> 08 < / html> 09 10 # includes/nav.html 11 12 <div  id = "nav" > 13      You are  in : {{ current_section }} 14 < / div>
만약current을 포함하는 것을 사용한다면섹션의 상하문에서 mypage를 렌더링합니다.html 이 템플릿 파일, 이 변수는 당신이 상상하는 것처럼 포함(include) 템플릿에 존재합니다.
{% include%} 태그에 지정된 템플릿을 찾을 수 없는 경우 Django는 다음 두 가지 프로세스 중 하나를 선택합니다.
  • DEBUG가 True로 설정되면 Django 오류 정보 페이지에서 Template DoesNotExist 이상을 볼 수 있습니다.
  • DEBUG가False로 설정된 경우 이 태그는 오류 정보를 유발하지 않으며 태그 위치에 아무것도 표시되지 않습니다.

  • extends
    include 역방향 extends
     
    1. 기초 템플릿을 정의하고 html 내용에서 여러 개의 Block 블록을 정의한다. Block은 하위 템플릿에서 같은 이름의 Block 블록을 인용하여 이 부분을 바꿀지 여부를 결정한다.
    {% block title %}    ,     {% endblock %}
    {% block content %} , {% endblock %}
    {% block footer %} , {% endblock %}

    여기에서 title content footer는 변수가 아닙니다. 이름은 사용자 정의입니다.
     
    2. 하위 템플릿의 인용 방식 {% extends "base.html"%}
    {% block title %}The current time{% endblock %}
    {% block content %}<p>It is now {{ current_date }}.</p>{% endblock %}

    첫 번째 문장은 고정된 형식입니다. 템플릿의 첫 번째 템플릿에 extends를 표시해야 하는 매개 변수는 일반적으로 문자열이거나 변수에 대한 경로, 상대 경로, TEMPLATEDIRS의 템플릿 디렉터리는 기본 하위 템플릿으로 교체할 블록을 결정합니다. 다른 부분에 신경 쓸 필요가 없습니다. 정의된 블록이 없으면 교체하지 않고 부모 템플릿의 블록을 직접 사용합니다.
     
    3. 상급 코드 블록을 인용하여 그 기초 위에서 수정 {{{{block.super}}
    {% block footer %}
    {{ block.super }}
    AAAAA
    {% endblock %}
                  :
  •  템플릿에서 {% extends%}를 사용하면 템플릿의 첫 번째 템플릿으로 표시해야 합니다.그렇지 않으면 템플릿 상속이 작동하지 않습니다.
  •  일반적으로 기본 템플릿의 {% block%} 태그가 많을수록 좋습니다.하위 템플릿은 반드시 부모 템플릿의 모든 코드 블록이 아니라는 것을 기억하십시오. 따라서 합리적인 절약값으로 일부 코드 블록을 채운 다음 하위 템플릿에 필요한 코드 블록만 (다시) 정의할 수 있습니다.갈고리가 많으면 많을수록 좋다는 속담이 있다.
  •  여러 템플릿 사이에서 코드를 복사한 것을 발견하면 이 코드 세그먼트를 부모 템플릿의 {% Block%}에 배치하는 것을 고려해야 합니다.
  •  부모 템플릿의 코드 블록의 내용을 얻으려면 {{block.super}} 변수를 사용할 수 있습니다.만약 상급 코드 블록에 내용을 추가하고 전체 재부팅이 아니라면 이 변수는 매우 유용하게 보일 것이다.
  • \같은 템플릿에 같은 이름의 {% Block%} 여러 개를 정의할 수 없습니다.이러한 제한이 존재하는 것은 Block 라벨의 작업 방식이 양방향이기 때문이다.즉, Block 라벨은 메울 구덩이를 팠을 뿐만 아니라 부모 템플릿에 이 구덩이가 채워진 내용을 정의했다.템플릿에 같은 이름의 {% block%} 탭이 두 개 나타나면 부모 템플릿은 어떤 블록을 사용해야 할지 알 수 없습니다.
  • \{% extends%} 전송된 템플릿 이름에 대한 불러오는 방법과 gettemplate()가 같습니다.즉, 템플릿 이름이 TEMPLATE 에 추가됩니다.DIRS 설정 후
  •  대부분의 경우 {% extends%}의 매개 변수는 문자열이어야 하지만, 실행할 때까지 부모 템플릿 이름을 정할 수 있다면 이 매개 변수도 변수일 수 있습니다.이것은 너로 하여금 매우 멋진 동적 기능을 실현할 수 있게 한다. 
  • 좋은 웹페이지 즐겨찾기