Django テンプレートの使用を開始する

完了

テンプレートは、HTML や XML などのテキスト ベースの形式を生成するために使用できるテキスト ファイルです。 各テンプレートには、サイト間で共有される静的データが含まれていますが、動的データのプレースホルダーも含まれていることがあります。 テンプレートには、動作を制御する変数とタグ、および最後のページとして表示される内容が含まれています。

Django でテンプレートがどのように機能するかを見てみましょう。

変数

テンプレート内の変数は、他のプログラミング言語の場合と同様に動作します。 これらを使用して、実行時に評価される値を示すことができます。

Django は、{{ }} 構文を使用してテンプレートに変数を表示する方法を提供します。 二重中かっこ内に配置された任意の変数は、テキスト コンテンツに対して評価されてから、テンプレートに配置されます。 たとえば、犬の名前を表示する場合は、{{dog.name}} を使用します。

ビューでは、render 関数を使用してテンプレートに変数を渡します。これについては、後のモジュールで説明します。 Django ORM からの QuerySet など、値やその他のデータをテンプレートに渡すことができます。 これによって、アプリケーションのデータベースのデータを表示できます。

フィルター

フィルターは、テンプレートで要求されたときのデータの表示方法を制御するための優れた方法です。 フィルターは既に作成されているため、特別なコードを記述しなくても、簡単にデータを書式設定することができます。

たとえば、犬種の名前を出力する必要があり、すべての名前の最初の文字が大文字になるようにしたいとします。

{{ dog.name | capfirst }}

変数はパイプ記号 (|) の左側にあり、フィルターは右側にあります。 これは、Django テンプレート フィルターを使用しているときにデータを操作するために使用できる多数のフィルターの 1 つにすぎません。

タグ

タグを使用して、ループを実行したり、テキストを作成したり、テンプレート エンジン用に他の種類のコマンドを提供したりできます。 多くの場合、タグは Python 構文に似ています。 ただし、これらは (Python インタープリター内ではなく) テンプレート内で実行されるため、構文に若干の違いがあることがわかります。 Python の場合と同様に、タブを利用できない場合は、各ブロック ステートメントに対応する end が必要になります。

ブール論理には if ステートメントを使用し、反復処理には for ループを使用できます。 if ステートメントのコア構文は次のようになります。

{% if dogs %}
    <h2>There are {{ dogs | length }} ready for adoption!</h2>
{% else %}
    <h2>We have no dogs ready for adoption. Please check back later!</h2>
{% endif %}

注意

elif ステートメントは、Python の elif の場合と同じ方法で使用されます。

同様に、for ループを使用して、一覧内のすべての犬の名前を表示することもできます。

<ul>
    {% for dog in dogs %}
        <li>{{ dog.name }}</li>
    {% endfor %}
<ul>

テンプレートの継承

テンプレートは、ユーザーがアプリケーションを使用しているときに表示される HTML を生成するために使用されます。 アプリケーション内のページでは通常、一般的な構造が共有されます。ナビゲーションは左側にあり、タイトルは一番上にあり、一貫性のあるスタイルシートが存在します。 Django テンプレートでは、継承によって共有構造がサポートされます。

親ページを作成する

親ページの作成は、Django HTML テンプレートの作成と同じです。 外部構造を指定してから、{% block %} プレースホルダーを含めます。 これらのプレースホルダーを使用すると、子は、これらのプレースホルダーに配置するコンテンツを提供できます。

スタイルシートをインポートする親ページを作成し、既定のタイトルを指定して、すべてのページに表示するヘッダーを指定しましょう。

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>{% block title %}Shelter site{% endblock %}</title>
</head>
<body>
    <h1>Shelter site</h1>
    {% block content %}
    {% endblock %}
</body>
</html>

子ページを作成する

extends キーワードを使用して、親から子ページを作成できます。 このキーワードを使用して、親テンプレートの HTML ファイルの名前を指定します。 次に、適切な {% block %} ステートメントを使用して、そのページに固有のコンテンツを追加します。

{% extends "parent.html" %}

{% block title %}
Welcome to the Shelter site!
{% endblock %}

{% block content %}
Thank you for visiting our site!
{% endblock %}

ページが表示されると、次のようになります。

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>Welcome to the shelter site</title>
</head>
<body>
    <h1>Shelter site</h1>
    Thank you for visiting our site!
</body>
</html>

子ページのコンテンツによってプレースホルダーがどのように置き換えられるかに注目してください。

注意

この例では、静的テキストを使用しています。 ご覧のように、動的なコンテンツを使用することもできます。