Programming

덮어 쓰기보다는 {% 블록 %}에 추가 할 수 있습니까?

procodes 2020. 8. 5. 21:32
반응형

덮어 쓰기보다는 {% 블록 %}에 추가 할 수 있습니까?


내 core.html에는 javascript라는 블록이 있습니다. 이 블록에 모든 것을 덮어 쓰지 않고 더 많은 행을 추가 할 수 있다면 좋을 것입니다.


{% block javascript %}
    {{ block.super }}
    ... more content ...
{% endblock %}

참조 : Django documentation-템플릿 상속


사용하여 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) 프레임 워크가 없기 때문입니다. 예, 장고의 양식에 사용되는 미디어 클래스가 있지만 실제로는 잘 작동하지 않습니다. 일반적으로 프론트 엔드 사람들은 CSS와 자바 스크립트 파일을 포함하기로 결정하고 파이썬 파일을 편집하여 파이썬 파일을 변경하지 않기를 원치 않습니다. 따라서 현재 위치 이전 또는 이후에있는 템플리트의 컨텐츠를 편집 할 수 있어야했습니다. 또한 중복을 제거하고 싶었습니다. 결과적으로 django-sekizai를 썼습니다. 블록을 상속하는 대신 블록과 비슷하게 확장합니다.

참고 URL : https://stackoverflow.com/questions/1724466/can-we-append-to-a-block-rather-than-overwrite

반응형