2016-06-18 19 views
1

私は現時点でDjangoを学ぼうとしており、私は何もばかげていないことを確認しようとしています。Djangoのテンプレートインクルードと静的インクルードの違いは何ですか?

テンプレート(ベース.html)でハードコードされた値を削除するという意味で、私のWebページをモジュラー化する過程にあります。そうするために、ハードコードされたCDN参照(jquery、bootstrapなど)をすべてのWebページに含めることができるモジュールに変換しようとしています。そうすることで、すべてのWebページに移動してその変更を強制するのではなく、将来私が単一のファイルを変更できるようになります。

しかし、私は少し混乱しています。私はそれをHTMLファイルにコピーして、Djangoの{% include '' %}テンプレートタグを使用してcdn部分を直接インクルードするか、またはDjangoの静的インクルードを使用する方が適切かどうかを判断しようとしています。

だから、どのルートが最適ですか?それはすべての正直に静的なすべてのテンプレートのインクルードを使用することは非常に簡単になるように思えます。なぜそれを使用してJavaScriptや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.htmlincludeそれをすることができますが、それだけで冗長な複雑さの原因となる、モジュールの上につながります。

問題がある場合は教えてください。

関連する問題