웹 사이트는 일반적으로 이미지, 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
을하지만, 그것은 단지 중복 복잡성을 야기 모듈화를 통해 연결됩니다.
문제가 있으면 알려주세요.