2011-10-14 5 views
2

장고 응용 프로그램에서 페이지의 기본 템플릿을 확장해야하지만이 새 페이지에서 제외해야하는 HTML 요소가 몇 가지 있습니다. 그들을 제거하는 가장 좋은 방법은 무엇입니까? JQuery를 사용하여 요소를 삭제할 수 있습니까?Django 기본 템플릿을 재정의하는 방법

답변

4

이렇게하려면 템플릿 블록을 사용할 수 있습니다.

{% block a_unique_name %}<div>This is only relevant in base.html</div>{% endblock %} 

블록의 HTML이 다른 템플릿을 무시없는 경우에만 사용됩니다 예를 들어, base.html에서 명명 된 블록의 HTML 요소를 둘러싸고 있습니다. 이처럼 서브 템플릿에서 재정의 할 수 있습니다

{% extend base.html %} 
{% block a_unique_name %}{% endblock %} 

지금 서브 템플릿의 값이 사용되며 base.html에서 기본값보다 우선합니다.

+0

위대한 답변, 감사합니다! – user995469

0

이러한 요소없이 기본 템플릿을 만듭니다. 이러한 요소를 사용하여 하위 템플릿을 만듭니다. 이 하위 템플릿과이 특정 페이지 - 기본 템플릿의 모든 페이지를 상속합니다.

또 다른 방법은 이러한 요소를 기본 템플릿의 블록에 넣는 것입니다.

{# base template #} 
{% block override_me %} 
<elem1 /><elem2 /> 
{% endblock %} 

{# child template #} 
{% block override_me %}{% endblock %} 
+0

이것은 반드시 나쁜 생각은 아닙니다. 코드를 base.html에 넣지 않도록 여러 하위 템플릿에서 다시 작성해야하는 경우 DRY 원칙을 위반합니다. 블록을 사용하는 것이 좋습니다. –

+0

@ George Cummins JS로 요소를 제거하는 것이 반드시 나쁜 생각은 아니겠습니까? 우욱. DRY가 위반 된 곳을 표시하십시오. (예를 들어,이 방법은 [django site] (https://github.com/django/djangoproject.com/tree/master/django_website/templates)에서 사용됩니다). – DrTyrsa

+0

명백하게 나는 원래의 질문에서 당신의 "나쁜 생각"에 대한 언급이 어느쪽으로 향했는가에 대해 분명하지 않았다. 하위 템플릿에서 요소를 제거하는 것은 문제가되지 않지만 JS를 통해 요소를 제거하는 것이 이상적이지 않다는 데 동의합니다. 답변의 첫 번째 단락을 다시 작성하면 내 downvote를 삭제할 수 있습니다. –

관련 문제