2016-06-18 3 views
1

나는 지금 장고를 배우려고 노력 중이며 내가 바보 같은 짓을하지 않기 위해 노력하고있다.Django에서 템플릿 포함과 정적 포함의 차이점은 무엇입니까?

나는 템플릿 (기본 .html)에서 하드 코드 된 값을 제거한다는 의미에서 웹 페이지를 모듈화하는 과정에 있습니다. 이렇게, 하드 코딩 된 CDN 참조 (jquery, bootstrap 등)를 모든 웹 페이지에 포함될 수있는 모듈로 변환하려고합니다. 이렇게하면 모든 웹 페이지로 이동하여 변경하는 대신 미래의 단일 파일을 변경할 수 있습니다.

그러나 약간 혼란 스럽습니다. 나는 html 파일에 그들을 복사하고 장고의 {% include '' %} 템플릿 태그를 직접 cdn 부분을 사용하여, 또는 장고의 정적 포함을 사용하는 것이 더 적절하다고 판단하는 것이 의미가 있는지 확인하려고합니다.

그래서 가장 좋은 경로는 무엇입니까? 템플릿을 사용하는 것이 모든 정직에서 모든 것을 정적으로 포함하는 것이 매우 쉬울 것 같습니다. 왜 그것을 자바 스크립트 또는 CSS를 포함하는 데 사용하지?

답변

1

웹 사이트는 일반적으로 이미지, JavaScript 또는 CSS와 같은 추가 파일을 제공해야합니다. Django에서는 이러한 파일을 "정적 파일"이라고 부릅니다.

동적이지 않기 때문에 단순히 정적이라고 부릅니다. 즉, 이러한 파일의 내용은 디자인이나 본질적인 특성 (예 : 이미지와 같은 바이너리 콘텐츠)에 의해 상대적으로 고정되므로 필요하지 않습니다. 응용 프로그램 서버에서 처리합니다.

이 정적 파일을 하위 수준에서 제공하는 것이 좋습니다 (예 : nginx 사용). 다른 파일과 차별화됩니다. 이를 통해 우리는이 파일들을 더 빨리 에 제공 할 수 있으며, 성능 향상을 가져 오는과 같습니다. 또한 쉽게 캐싱을 허용합니다.

그러나 CDN을 사용할 때는이 작업을 서버에서 다른 서버로 오프로드해야합니다.

이제 질문에 다시 올 수 있습니다. 모든 템플릿에서 리소스를 선언 할 필요는 없습니다. 일반적으로 base.html은 더 구체적인 (하위) 템플릿으로 확장 (읽음 : template inheritance) 할 수있는 페이지의 기초를 포함합니다.

base.html : : 이제

<html> 
    <head> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" href="~~CDN HERE~~"> 
     <script src="~~CDN HERE~~"></script> 
    </head> 
    <body> 
     {% block body %}{% endblock %} 
    </body> 
</html> 

article.html

{% extends "app/base.html" %} 
{% load static %} 
{% block body %} 
<h1>{{ page_title }}</h1> 
<img src="{% static 'app/img/detective.png' %}" alt="detective" /> 
    {{ page_content | safe }} 
{% endblock %} 

사이트의 모든 기사, 당신은 문서를 렌더링

빨리이 문제를 이해하려면, 여기 예제 템플릿을 자동으로 확장하여 여러 페이지에 대한 CSS/JS 파일을 언급하지 않아도됩니다.

서로 다른 페이지에 대한 다른 리소스 파일을 사용하는 경우, 당신이 창조 한 후 {% block css %}{% endblock %}

와 같은 추가 블록 내가 정적 사용하고 방법 article.html

{% block css %} 
<link rel="stylesheet" href="{% static 'app/css/article.css' %}"> 
{% endblock %} 

공지 사항이 추가 할 수 있습니다 이미지는 nginx에서 직접 제공합니다.

이론적으로 클럽 파일에 당신의 CDN 링크 및 base.html에서 다음 include을하지만, 그것은 단지 중복 복잡성을 야기 모듈화를 통해 연결됩니다.

문제가 있으면 알려주세요.

관련 문제