답변:
{% block javascript %}
{{ block.super }}
... more content ...
{% endblock %}
참조 : Django 문서-템플릿 상속
사용하여 block.super
, 하나의 예를 포함 할 때뿐만 아니라 템플릿을 확장하지만 때 작품의 벌금을 :
{% extends "base.html" %} vs. {% include "partial.html" %}
페이지 중간에 템플릿을 포함하고 페이지 끝에있는 블록에 자바 스크립트를 추가하고 싶다고 가정 해 보겠습니다. 포함 된 템플릿을 호출 block.super
하면 충돌이 발생합니다.
Cf. Django 문제 # 7324 , # 12008 , # 13399 및 관련 문서 업데이트 . Cf. 태그 노트 포함 :
include 태그는 "이 서브 템플릿을 구문 분석하고 부모의 일부인 것처럼 내용을 포함"하는 것이 아니라 "이 서브 템플릿 렌더링 및 HTML 포함"의 구현으로 간주되어야합니다. 이것은 포함 된 템플릿간에 공유 상태가 없음을 의미합니다. 각 포함은 완전히 독립적 인 렌더링 프로세스입니다.
블록은 포함되기 전에 평가됩니다. 즉, 다른 블록의 블록을 포함하는 템플릿에는 확장 템플릿 등으로 재정의 할 수있는 블록이 아니라 이미 평가 및 렌더링 된 블록이 포함됩니다.
이 경우 나는 사용하는 것이 좋습니다 django-sekizai를 그러면 다음과 같은 작업을 수행 할 수 있습니다.
{% load sekizai_tags %}
⎧ <p>Some content</p>
<p>Some content</p> | {% addtoblock "js" %}
| <script type="text/javascript">
{% include "partial.html" %} -> ⎨ alert("Hello django-sekizai");
| </script>
<p>Some more content</p> ⎩ {% endaddtoblock %}
{% render_block "js" %}
에서 장고 - sekizai README :
이 프로젝트를 시작한 주된 이유는 django와 django-cms에 좋은 미디어 (css / js) 프레임 워크가 없기 때문입니다. 예, django의 양식에 사용되는 Media 클래스가 있지만 실제로는 잘 작동하지 않습니다. 일반적으로 프론트 엔드 직원은 CSS와 자바 스크립트 파일을 포함하기를 원하며 Python 파일을 변경하기 위해 Python 파일을 편집 할 필요가 없습니다. 따라서 현재 위치 이전 또는 이후에있는 템플릿의 내용을 편집 할 수 있어야했습니다. 또한 중복을 제거하고 싶었습니다. 결과적으로 나는 django-sekizai를 썼습니다. 블록과 유사하며 상속하는 대신 확장합니다.