{"title":"Python プログラマーのための Django テンプレート言語","version":"5.0","locale":"ja","docname":"ref/templates/api","url":"/ja/5.0/ref/templates/api/","canonical":"https://djangodocs.dev/ja/5.0/ref/templates/api/","summary":"この文書は Django テンプレートシステムがどのように動作し、どのように拡張するか、技術的な観点から説明します。","html":"<h1>Python プログラマーのための Django テンプレート言語<a class=\"heading-anchor\" href=\"#the-django-template-language-for-python-programmers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>この文書は Django テンプレートシステムがどのように動作し、どのように拡張するか、技術的な観点から説明します。構文に関するリファレンスを探しているなら、 <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/language/\"><span class=\"doc\">Django テンプレート言語</span></a> を参照してください。</p>\n<p>テンプレート、 コンテキスト、変数、タグ、レンダリングについての理解を前提としています。これらの概念に馴染みがなければ、 <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#template-language-intro\"><span class=\"std std-ref\">Django テンプレート言語入門</span></a> からスタートしてください。</p>\n<section id=\"overview\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Pythonでテンプレートシステムを使うには3つのステップがあります：</p>\n<ol class=\"arabic simple\">\n<li><p><a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> を設定します。</p></li>\n<li><p>テンプレートコードを <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> にコンパイルします。</p></li>\n<li><p>テンプレートを <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> においてレンダリングします。</p></li>\n</ol>\n<p>これらの各ステップで、Django プロジェクトは通常、テンプレートシステムの低レベルの API ではなく、 <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#template-engines\"><span class=\"std std-ref\">バックエンドに依存しない高レベルの API</span></a> に依存しています：</p>\n<ol class=\"arabic simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定の中で、各 <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> バックエンドに対して、Djangoは <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> をインスタンス化します。<a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> は <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> をラップし、共通のテンプレートバックエンドAPIに適応させます。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#module-django.template.loader\" title=\"django.template.loader\"><code class=\"xref py py-mod docutils literal notranslate\">django.template.loader</code></a> モジュールはテンプレートを読み込むための <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> のなどの関数を提供します。これらは実際の <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">django.template.Template</code></a> をラップした <code class=\"docutils literal notranslate\">django.template.backends.django.Template</code> を返します。</p></li>\n<li><p>前のステップで取得した <code class=\"docutils literal notranslate\">Template</code> には <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.base.Template.render\" title=\"django.template.backends.base.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\">render()</code></a> メソッドがあり、コンテキストと場合によってはリクエストを <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> に集約し、その下にある <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> にレンダリングを委譲します。</p></li>\n</ol>\n</section>\n<section id=\"configuring-an-engine\">\n<h2>エンジンを設定する<a class=\"heading-anchor\" href=\"#configuring-an-engine\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>もし <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> バックエンドを使っているのであれば、これはおそらくあなたが探しているドキュメントではありません。後述する <code class=\"docutils literal notranslate\">Engine</code> クラスのインスタンスには、そのバックエンドの <code class=\"docutils literal notranslate\">engine</code> 属性を使ってアクセスすることができ、後述する属性のデフォルトは <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> で渡されたもので上書きされます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Engine</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">dirs<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">app_dirs<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">context_processors<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">debug<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">loaders<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">string_if_invalid<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">file_charset<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">libraries<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">builtins<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">autoescape<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">Engine</code> をインスタンス化する際は、すべての引数をキーワード引数として渡す必要があります：</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">dirs</code> はエンジンがテンプレートのソースファイルを探すディレクトリのリストです。これは <a class=\"reference internal\" href=\"#django.template.loaders.filesystem.Loader\" title=\"django.template.loaders.filesystem.Loader\"><code class=\"xref py py-class docutils literal notranslate\">filesystem.Loader</code></a> を設定するために使用されます。</p>\n<p>デフォルトは空のリストです。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">app_dirs</code> は <code class=\"docutils literal notranslate\">loaders</code> のデフォルト値にだけ影響します。下記を参照してください。</p>\n<p>デフォルトは <code class=\"docutils literal notranslate\">False</code> です。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">autoescape</code> はHTMLのオートエスケープを有効にするかどうかをコントロールします。</p>\n<p>デフォルトは <code class=\"docutils literal notranslate\">True</code> です。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>HTML以外のテンプレートをレンダリングする場合のみ <code class=\"docutils literal notranslate\">False</code> に設定してください！</p>\n</aside>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'context_processors'</code> は、リクエストでテンプレートがレンダリングされるときにコンテキストを生成するために使用される呼び出し可能オブジェクトへの Python のドット区切りパスのリストです。これらの呼び出し可能オブジェクトはリクエストオブジェクトを引数として取り、コンテキストにマージされるアイテムの <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">dict</code></a> を返します。</p>\n<p>デフォルトは空のリストです。</p>\n<p>詳しくは <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> を参照してください。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">debug</code> はテンプレートのデバッグモードのオン/オフを切り替える真偽値です。もし <code class=\"docutils literal notranslate\">True</code> なら、テンプレートエンジンは追加のデバッグ情報を保存し、テンプレートのレンダリング中に例外が発生した場合に詳細なレポートを表示できます。</p>\n<p>デフォルトは <code class=\"docutils literal notranslate\">False</code> です。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">loaders</code> はテンプレートローダクラスのリストで、文字列で指定します。各 <code class=\"docutils literal notranslate\">Loader</code> クラスは特定のソースからテンプレートをインポートする方法を知っています。任意で、文字列の代わりにタプルを使うこともできます。タプルの最初の項目は <code class=\"docutils literal notranslate\">Loader</code> クラス名で、それ以降の項目は初期化時に <code class=\"docutils literal notranslate\">Loader</code> に渡されます。</p>\n<p>リストにはデフォルトでは下記が含まれます：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'django.template.loaders.filesystem.Loader'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'django.template.loaders.app_directories.Loader'</code> 、これが含まれるのは <code class=\"docutils literal notranslate\">app_dirs</code> が <code class=\"docutils literal notranslate\">True</code> の場合だけです。</p></li>\n</ul>\n<p>これらのローダーは <a class=\"reference internal\" href=\"#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\">django.template.loaders.cached.Loader</code></a> でラップされます。</p>\n<p>詳しくは <a class=\"reference internal\" href=\"#template-loaders\"><span class=\"std std-ref\">ローダーの種類</span></a> を参照してください。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'string_if_invalid'</code> は、無効な(例えばスペルミスのある)変数に対してテンプレートシステムが使用する文字列です。</p>\n<p>デフォルトは空文字列です。</p>\n<p>詳しくは <a class=\"reference internal\" href=\"#invalid-template-variables\"><span class=\"std std-ref\">無効な変数の扱い</span></a> を参照してください。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'file_charset'</code> は、ディスク上のテンプレートファイルを読み込む際に使用する文字セットです。</p>\n<p>デフォルトは <code class=\"docutils literal notranslate\">'utf-8'</code> です。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'libraries'</code>: テンプレートエンジンに登録するテンプレートタグモジュールのラベルとドット区切りPythonパスの辞書。これは新しいライブラリを追加したり、既存のライブラリの代替ラベルを提供するために使用します。たとえば下記のように：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Engine<span class=\"p\">(</span>\n    libraries<span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;myapp_tags&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;path.to.myapp.tags&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;admin.urls&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.admin.templatetags.admin_urls&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\">{% load %}</code></a> タグに対応する辞書のキーを渡すことでライブラリをロードできます。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'builtins'</code>: <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/\"><span class=\"doc\">ビルトイン</span></a> に追加するテンプレートタグモジュールのドット区切りPythonパスのリストです。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Engine<span class=\"p\">(</span>\n    builtins<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;myapp.builtins&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\">{% load %}</code></a> タグを呼び出さなくても、組み込みライブラリのタグやフィルタを使うことができます。</p>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.get_default\">\n<em class=\"property\"><span class=\"k\">static</span> </em><span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">get_default</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.get_default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>最初に設定された <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> エンジンから <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> を返します。エンジンが設定されていない場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\">ImproperlyConfigured</code></a> を発生させます。</p>\n<p>これは、グローバルに利用可能で、暗黙的に設定されたエンジンに依存するAPIを保持するために必要です。それ以外の使用は強く推奨されません。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.from_string\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">from_string</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_code</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.from_string\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられたテンプレートコードをコンパイルして <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> オブジェクトを返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.get_template\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">get_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.get_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた名前のテンプレートを読み込んでコンパイルし、 <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> オブジェクトを返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.select_template\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">select_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name_list</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.select_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.template.Engine.get_template\" title=\"django.template.Engine.get_template\"><code class=\"xref py py-meth docutils literal notranslate\">get_template()</code></a> と同様ですが、名前のリストを受け取り、最初に見つかったテンプレートを返します。</p>\n</dd></dl>\n\n</section>\n<section id=\"loading-a-template\">\n<h2>テンプレートを読み込む<a class=\"heading-anchor\" href=\"#loading-a-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> を作成する推奨される方法は <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> のファクトリーメソッドを呼び出すことです。これは <a class=\"reference internal\" href=\"#django.template.Engine.get_template\" title=\"django.template.Engine.get_template\"><code class=\"xref py py-meth docutils literal notranslate\">get_template()</code></a>, <a class=\"reference internal\" href=\"#django.template.Engine.select_template\" title=\"django.template.Engine.select_template\"><code class=\"xref py py-meth docutils literal notranslate\">select_template()</code></a>, <a class=\"reference internal\" href=\"#django.template.Engine.from_string\" title=\"django.template.Engine.from_string\"><code class=\"xref py py-meth docutils literal notranslate\">from_string()</code></a> を指します。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定で <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> エンジンが定義されている Django プロジェクトでは、 <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> を直接インスタンス化できます。複数の <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> エンジンが定義されている場合、最初のものが使用されます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Template\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Template</span><a class=\"heading-anchor\" href=\"#django.template.Template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクラスは <code class=\"docutils literal notranslate\">django.template.Template</code> にあります。コンストラクタは1つの引数（生のテンプレートコード）を取ります：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Template\n\ntemplate <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ my_name }}.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition-behind-the-scenes admonition\" role=\"note\">\n<p class=\"admonition-title\">背景</p>\n<p>システムは生のテンプレートコードを一度だけ解析します。 <code class=\"docutils literal notranslate\">Template</code> オブジェクトを作成するときです。それ以降は、パフォーマンスのために内部的にツリー構造として保存されます。</p>\n<p>構文解析自体も非常に高速です。構文解析のほとんどは、1つの短い正規表現を呼び出すだけで行われます。</p>\n</aside>\n</section>\n<section id=\"rendering-a-context\">\n<h2>コンテキストをレンダリングする<a class=\"heading-anchor\" href=\"#rendering-a-context\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>一度コンパイルされた <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> オブジェクトがあれば、それを使ってコンテキストをレンダリングできます。同じテンプレートを再利用して、異なるコンテキストで何度でもレンダリングできます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Context</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">dict_<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">django.template.Context</code> のコンストラクタは、オプションの引数（変数名と変数の値をマッピングした辞書）を取ります。</p>\n<p>詳細は以下の <a class=\"reference internal\" href=\"#playing-with-context\"><span class=\"std std-ref\">Context オブジェクトを使って遊ぶ</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Template.render\">\n<span class=\"sig-prename descclassname\">Template.</span><span class=\"sig-name descname\">render</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Template.render\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> を指定して <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> オブジェクトの <code class=\"docutils literal notranslate\">render()</code> メソッドを呼び出します：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context<span class=\"p\">,</span> Template\n<span class=\"gp\">&gt;&gt;&gt; </span>template <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ my_name }}.&quot;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>context <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adrian&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">)</span>\n<span class=\"go\">&quot;My name is Adrian.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>context <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Dolores&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">)</span>\n<span class=\"go\">&quot;My name is Dolores.&quot;</span>\n</code></pre></div>\n</dd></dl>\n\n<section id=\"variables-and-lookups\">\n<h3>変数とルックアップ<a class=\"heading-anchor\" href=\"#variables-and-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>変数名はアルファベット(A-Z)、数字(0-9)、アンダースコア(ただしアンダースコアで始まってはならない)、ドットで構成されていなければなりません。</p>\n<p>ドットはテンプレートレンダリングにおいて特別な意味を持ちます。変数名のドットは <strong>ルックアップ</strong> を意味します。具体的には、テンプレートシステムが変数名でドットを見つけると、以下の順番でルックアップを試みます：</p>\n<ul class=\"simple\">\n<li><p>辞書のルックアップ。例： <code class=\"docutils literal notranslate\">foo[&quot;bar&quot;]</code></p></li>\n<li><p>属性のルックアップ。例： <code class=\"docutils literal notranslate\">foo.bar</code></p></li>\n<li><p>リストインデックスのルックアップ。例： <code class=\"docutils literal notranslate\">foo[bar]</code></p></li>\n</ul>\n<p>テンプレートコンテキストに変数 &quot;bar &quot;が存在する場合、<code class=\"docutils literal notranslate\">{{ foo.bar }}</code> のようなテンプレート式中の &quot;bar &quot;はリテラル文字列として解釈され、変数 &quot;bar&quot; の値は使用されないことに注意してください。</p>\n<p>テンプレートシステムは、最初に機能するルックアップ・タイプを使用します。これは短絡ロジックです。以下はその例です：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context<span class=\"p\">,</span> Template\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.first_name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>d <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Johnson&quot;</span><span class=\"p\">}}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">(</span>d<span class=\"p\">))</span>\n<span class=\"go\">&quot;My name is Joe.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">pass</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>first_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Ron&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>last_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Nasty&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is Ron.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;The first stooge in the list is {{ stooges.0 }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;stooges&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Larry&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Curly&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Moe&quot;</span><span class=\"p\">]})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>c<span class=\"p\">)</span>\n<span class=\"go\">&quot;The first stooge in the list is Larry.&quot;</span>\n</code></pre></div>\n<p>もし変数のどれかが呼び出し可能オブジェクトであれば、テンプレートシステムは呼び出しを試みます。例：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass2</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> <span class=\"s2\">&quot;Samantha&quot;</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> PersonClass2<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is Samantha.&quot;</span>\n</code></pre></div>\n<p>呼び出し可能な変数は、単純なルックアップしか必要としない変数よりも少し複雑です。以下に注意すべき点を示します：</p>\n<ul>\n<li><p>この変数が呼び出されたときに例外が発生した場合、例外が <code class=\"docutils literal notranslate\">silent_variable_failure</code> 属性の値が <code class=\"docutils literal notranslate\">True</code> でない限り、例外は伝播します。例外に <code class=\"docutils literal notranslate\">silent_variable_failure</code> 属性があり、その値が <code class=\"docutils literal notranslate\">True</code> である場合、その変数はエンジンの <code class=\"docutils literal notranslate\">string_if_invalid</code> 設定オプションの値（デフォルトでは空文字列）としてレンダリングされます。例：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.first_name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass3</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">raise</span> <span class=\"ne\">AssertionError</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass3<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">AssertionError</span>: foo\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">SilentAssertionError</span><span class=\"p\">(</span><span class=\"ne\">Exception</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    silent_variable_failure <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass4</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">raise</span> SilentAssertionError\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass4<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is .&quot;</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">django.core.exceptions.ObjectDoesNotExist</code></a> はすべての Django データベース API の <code class=\"docutils literal notranslate\">DoesNotExist</code> 例外用の基本クラスですが、 <code class=\"docutils literal notranslate\">silent_variable_failure = True</code> を持っていることに注意してください。そのため、 Django モデルオブジェクトで Django テンプレートを使っている場合、 <code class=\"docutils literal notranslate\">DoesNotExist</code> 例外はすべてサイレントエラーになります。</p>\n</li>\n<li><p>変数は必要な引数がない場合のみ呼び出すことができます。そうでない場合、システムはエンジンの <code class=\"docutils literal notranslate\">string_if_invalid</code> オプションの値を返します。</p></li>\n</ul>\n<ul id=\"alters-data-description\">\n<li><p>いくつかの変数を呼び出すときに副作用が発生する可能性があり、テンプレートシステムがそれらにアクセスできるようにするのは愚策またはセキュリティホールと言えます。</p>\n<p>良い例が、各 Django モデルオブジェクトの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a> メソッドです。テンプレートシステムはこのようなことをしてはいけません：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>I will now delete this valuable data. <span class=\"cp\">{{</span> <span class=\"nv\">data.delete</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>これを防ぐには、呼び出し可能オブジェクトに <code class=\"docutils literal notranslate\">alters_data</code> 属性を指定します。テンプレートシステムは <code class=\"docutils literal notranslate\">alters_data=True</code> が設定された変数を呼び出さず、代わりに無条件で <code class=\"docutils literal notranslate\">string_if_invalid</code> に置き換えます。 動的に生成される Django モデルオブジェクトの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> メソッドは自動的に <code class=\"docutils literal notranslate\">alters_data=True</code> を取得します。例：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">sensitive_function</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span>database_record<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n\n\nsensitive_function<span class=\"o\">.</span>alters_data <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n</li>\n<li><p>時には、別の理由でこの機能をオフにし、何があっても呼び出されない変数を残すようにテンプレートシステムに指示したいことがあるかもしれません。 そのためには、呼び出し可能オブジェクトの <code class=\"docutils literal notranslate\">do_not_call_in_templates</code> 属性を <code class=\"docutils literal notranslate\">True</code> に設定します。 そうすると、テンプレートシステムはあたかも変数が呼び出し可能でないかのように動作します（たとえば、呼び出し可能オブジェクトの属性にアクセスできます）。</p></li>\n</ul>\n</section>\n<section id=\"how-invalid-variables-are-handled\">\n<span id=\"invalid-template-variables\"></span><h3>無効な変数の扱い<a class=\"heading-anchor\" href=\"#how-invalid-variables-are-handled\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>通常、変数が存在しない場合、テンプレートシステムはエンジンの <code class=\"docutils literal notranslate\">string_if_invalid</code> 設定オプションの値を挿入します。</p>\n<p><code class=\"docutils literal notranslate\">string_if_invalid</code> が <code class=\"docutils literal notranslate\">''</code> (空文字列) に設定されている場合のみ、無効な変数に適用されるフィルタが適用されます。もし <code class=\"docutils literal notranslate\">string_if_invalid</code> が他の値に設定されている場合、変数フィルタは無視されます。</p>\n<p>この動作は <code class=\"docutils literal notranslate\">if</code>, <code class=\"docutils literal notranslate\">for</code>, <code class=\"docutils literal notranslate\">regroup</code> のテンプレートタグでは少し異なります。これらのテンプレートタグに無効な変数が指定された場合、その変数は <code class=\"docutils literal notranslate\">None</code> として解釈されます。これらのテンプレートタグ内の無効な変数には常にフィルタが適用されます。</p>\n<p>もし <code class=\"docutils literal notranslate\">string_if_invalid</code> が <code class=\"docutils literal notranslate\">'%s'</code> を含む場合、フォーマットマーカーは無効な変数名に置き換えられます。</p>\n<aside class=\"admonition-for-debug-purposes-only admonition\" role=\"note\">\n<p class=\"admonition-title\">デバッグ専用です！</p>\n<p><code class=\"docutils literal notranslate\">string_if_invalid</code> は便利なデバッグツールですが、「開発のデフォルト」としてオンにするのはよくありません。</p>\n<p>Django 組み込みのものを含む多くのテンプレートは、存在しない変数に遭遇した場合、テ ンプレートシステムの沈黙に依存しています。もし <code class=\"docutils literal notranslate\">string_if_invalid</code> に <code class=\"docutils literal notranslate\">''</code> 以外の値を代入すると、これらのテンプレートやサイトでレンダリングの問題が発生します。</p>\n<p>通常、<code class=\"docutils literal notranslate\">string_if_invalid</code> は特定のテンプレートの問題をデバッグするためだけに有効にし、デバッグが完了したらオフにすべきです。</p>\n</aside>\n</section>\n<section id=\"built-in-variables\">\n<h3>組み込み変数<a class=\"heading-anchor\" href=\"#built-in-variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>すべてのコンテキストは <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">None</code> を含みます。ご想像の通り、これらの変数は対応する Python オブジェクトに解決されます。</p>\n</section>\n<section id=\"limitations-with-string-literals\">\n<h3>文字列リテラルの制約<a class=\"heading-anchor\" href=\"#limitations-with-string-literals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django のテンプレート言語には、独自の構文に使われる文字をエスケープする手段がありません。例えば、 <code class=\"docutils literal notranslate\">{%</code> や <code class=\"docutils literal notranslate\">%}</code> のような文字列を出力する必要がある場合は、 <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-templatetag\"><code class=\"xref std std-ttag docutils literal notranslate\">templatetag</code></a> タグが必要です。</p>\n<p>これらのシーケンスをテンプレートフィルタやタグの引数に含めたい場合にも、同じような問題があります。例えば、ブロックタグを解析するとき、 Django のテンプレートパーサは <code class=\"docutils literal notranslate\">{%</code> の後に <code class=\"docutils literal notranslate\">%}</code> が最初に現れるかどうかを調べます。これは <code class=\"docutils literal notranslate\">&quot;%}&quot;</code> が文字列リテラルとして使われるのを阻止します。たとえば、以下のような式では <code class=\"docutils literal notranslate\">TemplateSyntaxError</code> が発生します：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;template.html&quot;</span> <span class=\"nv\">tvar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Some string literal with %} in it.&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">with</span> <span class=\"nv\">tvar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Some string literal with %} in it.&quot;</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endwith</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>フィルタの引数に予約済みのシーケンスを使用すると、同じ問題が発生することがあります：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">some.variable</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;}}&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>これらのシーケンスで文字列を使用する必要がある場合は、テンプレート変数に格納するか、カスタムテンプレートタグまたはフィルタを使用して制限を回避してください。</p>\n</section>\n</section>\n<section id=\"playing-with-context-objects\">\n<span id=\"playing-with-context\"></span><h2><code class=\"docutils literal notranslate\">Context</code> オブジェクトを使って遊ぶ<a class=\"heading-anchor\" href=\"#playing-with-context-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>たいていの場合、<code class=\"docutils literal notranslate\">Context()</code> に辞書を渡して <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> オブジェクトをインスタンス化します。しかし、一度インスタンス化された <code class=\"docutils literal notranslate\">Context</code> オブジェクトに対しても、標準的な辞書構文を使ってアイテムの追加や削除を行うことができます：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;bar&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">del</span> c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">KeyError</span>: &#39;foo&#39;\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;newvariable&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;hello&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;newvariable&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;hello&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.get\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">get</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">key</em>, <em class=\"sig-param\">otherwise<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>もし <code class=\"docutils literal notranslate\">key</code> がコンテキストに存在すれば <code class=\"docutils literal notranslate\">key</code> の値を返し、そうでなければ <code class=\"docutils literal notranslate\">otherwise</code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.setdefault\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">setdefault</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">key</em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.setdefault\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>もし <code class=\"docutils literal notranslate\">key</code> がコンテキスト内にあれば、その値を返します。そうでない場合は、 <code class=\"docutils literal notranslate\">default</code> の値を持つ <code class=\"docutils literal notranslate\">key</code> を挿入し、 <code class=\"docutils literal notranslate\">default</code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.pop\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">pop</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.pop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.push\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">push</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.push\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.template.ContextPopException\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">ContextPopException</span><a class=\"heading-anchor\" href=\"#django.template.ContextPopException\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>コンテキストオブジェクトはスタックです。つまり、 <code class=\"docutils literal notranslate\">push()</code> したり <code class=\"docutils literal notranslate\">pop()</code> したりすることができます。 <code class=\"docutils literal notranslate\">pop()</code> しすぎると <code class=\"docutils literal notranslate\">django.template.ContextPopException</code> が発生します：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>push<span class=\"p\">()</span>\n<span class=\"go\">{}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;overwritten&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;overwritten&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ContextPopException</span>\n</code></pre></div>\n<p>また、コンテキストマネージャとして <code class=\"docutils literal notranslate\">push()</code> を使うことで、それに対応する <code class=\"docutils literal notranslate\">pop()</code> が呼び出されるようにすることもできます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>push<span class=\"p\">():</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">push()</code> に渡されたすべての引数は、新しいコンテキストレベルを構築するために使用される <code class=\"docutils literal notranslate\">dict</code> コンストラクタに渡されます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>push<span class=\"p\">(</span>foo<span class=\"o\">=</span><span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.update\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">update</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">other_dict</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">push()</code> と <code class=\"docutils literal notranslate\">pop()</code> に加えて、 <code class=\"docutils literal notranslate\">Context</code> オブジェクトは <code class=\"docutils literal notranslate\">update()</code> メソッドも定義しています。これは <code class=\"docutils literal notranslate\">push()</code> と同じように動作しますが、辞書を引数として受け取り、空の辞書の代わりにその辞書をスタックにプッシュします。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;updated&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;updated&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;updated&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;updated&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">push()</code> と同様に、コンテキストマネージャとして <code class=\"docutils literal notranslate\">update()</code> を使うことで、それに対応する <code class=\"docutils literal notranslate\">pop()</code> が呼び出されるようにすることができます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">}):</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p>スタックとして <code class=\"docutils literal notranslate\">Context</code> を使うと、 <a class=\"reference internal\" href=\"/ja/5.0/howto/custom-template-tags/#howto-writing-custom-template-tags\"><span class=\"std std-ref\">いくつかのテンプレートタグ</span></a> で便利です。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.flatten\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">flatten</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.flatten\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">flatten()</code> メソッドを使うと、組み込み変数を含む <code class=\"docutils literal notranslate\">Context</code> スタック全体を一つの辞書として取得できます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;bar&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>flatten<span class=\"p\">()</span>\n<span class=\"go\">{&#39;True&#39;: True, &#39;None&#39;: None, &#39;foo&#39;: &#39;first level&#39;, &#39;False&#39;: False, &#39;bar&#39;: &#39;second level&#39;}</span>\n</code></pre></div>\n<p>内部的には <code class=\"docutils literal notranslate\">flatten()</code> メソッドは <code class=\"docutils literal notranslate\">Context</code> オブジェクトを比較できるようにするためにも使われています。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c1 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1<span class=\"p\">[</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c2 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c2<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;first level&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;first level&#39;, &#39;bar&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1 <span class=\"o\">==</span> c2\n<span class=\"go\">True</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">flatten()</code> の結果は、ユニットテストで <code class=\"docutils literal notranslate\">Context</code> と <code class=\"docutils literal notranslate\">dict</code> を比較するのに便利です：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ContextTest</span><span class=\"p\">(</span>unittest<span class=\"o\">.</span>TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_against_dictionary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        c1 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n        c1<span class=\"p\">[</span><span class=\"s2\">&quot;update&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;value&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>\n            c1<span class=\"o\">.</span>flatten<span class=\"p\">(),</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;True&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;None&quot;</span><span class=\"p\">:</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;False&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;update&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;value&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"using-requestcontext\">\n<span id=\"subclassing-context-requestcontext\"></span><h3><code class=\"docutils literal notranslate\">RequestContext</code> を使う<a class=\"heading-anchor\" href=\"#using-requestcontext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.RequestContext\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RequestContext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">dict_<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">processors<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.RequestContext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django では特別な <code class=\"docutils literal notranslate\">Context</code> クラスである <code class=\"docutils literal notranslate\">django.template.RequestContext</code> が使えます。これは、通常の <code class=\"docutils literal notranslate\">django.template.Context</code> とはいくつかの点で異なります。最初の違いは、最初の引数として <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> を取ることです。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>c <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>\n    request<span class=\"p\">,</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>2 つめの違いは、エンジンの <code class=\"docutils literal notranslate\">context_processors</code> 設定オプションによって、昆的に自動的にいくつかの変数をセットすることです。</p>\n<p><code class=\"docutils literal notranslate\">context_processors</code> オプションは callable -- <strong>context processors</strong> と呼ばれます -- のリストで、引数としてリクエストオブジェクトを受け取り、コンテキストに統合する項目のディクショナリを返します。 デフォルトで生成される設定ファイルでは、テンプレートエンジンは以下のコンテキストプロセッサを含んでいます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.template.context_processors.debug&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.template.context_processors.request&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.context_processors.auth&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.messages.context_processors.messages&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>上記に加えて、<a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> は常に <code class=\"docutils literal notranslate\">'django.template.context_processors.csrf'</code> を使えるようにしています。これは、admin や他の contrib アプリケーションで必要な、セキュリティ関連のコンテキストプロセッサで、設定ミスの場合に備えて意図的にハードコードされており、<code class=\"docutils literal notranslate\">context_processors</code> オプション内で無効化できないようになっています。</p>\n<p>各プロセッサは順番通りに適用されます。したがって、1 番目と 2 番目のプロセッサがそれぞれ同じ名前の変数をコンテキストに追加したとき、2 番目の変数が 1 番目をオーバーライドします。デフォルトのプロセッサは以下で説明します。</p>\n<aside class=\"admonition-when-context-processors-are-applied admonition\" role=\"note\">\n<p class=\"admonition-title\">コンテキストプロセッサが適用されたとき</p>\n<p>コンテキストプロセッサは、コンテキストデータのトップに適用されます。これは、<a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> や <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> に与えた変数を、コンテキストプロセッサが上書きすることを意味します。コンテキストプロセッサによって提供される変数と、名前が重複しないように気をつけてください。</p>\n<p>コンテキストデータをコンテキストプロセッサに優先させたい場合、以下のパターンを使ってください:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> RequestContext\n\nrequest_context <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>request<span class=\"p\">)</span>\nrequest_context<span class=\"o\">.</span>push<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adrian&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Django はこれを使って、<a class=\"reference internal\" href=\"/ja/5.0/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\">render()</code></a> や <a class=\"reference internal\" href=\"/ja/5.0/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponse</code></a> といった API で、コンテキストデータがコンテキストプロセッサをオーバーライドできるようにします。</p>\n</aside>\n<p>また、省略可能な第 3 引数 <code class=\"docutils literal notranslate\">processors</code> を使って、<a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> に追加的なプロセッサを渡すこともできます。以下の例では、<a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> のインスタンスは <code class=\"docutils literal notranslate\">ip_address</code> 変数を格納します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> RequestContext<span class=\"p\">,</span> Template\n\n\n<span class=\"k\">def</span> <span class=\"nf\">ip_address_processor</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;ip_address&quot;</span><span class=\"p\">:</span> request<span class=\"o\">.</span>META<span class=\"p\">[</span><span class=\"s2\">&quot;REMOTE_ADDR&quot;</span><span class=\"p\">]}</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">client_ip_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    template <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;{{ title }}: {{ ip_address }}&quot;</span><span class=\"p\">)</span>\n    context <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>\n        request<span class=\"p\">,</span>\n        <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Your IP Address&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"p\">[</span>ip_address_processor<span class=\"p\">],</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"built-in-template-context-processors\">\n<span id=\"context-processors\"></span><h3>ビルトインのテンプレートコンテキストプロセッサ<a class=\"heading-anchor\" href=\"#built-in-template-context-processors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>以下は、それぞれのビルトインのプロセッサが行うことです:</p>\n<section id=\"django-contrib-auth-context-processors-auth\">\n<h4><code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.auth</code><a class=\"heading-anchor\" href=\"#django-contrib-auth-context-processors-auth\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.context_processors.auth\">\n<span class=\"sig-name descname\">auth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.context_processors.auth\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は以下の変数を含みます:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">user</code> -- <code class=\"docutils literal notranslate\">auth.User</code> のインスタンスで、現在ログイン中のユーザ (あるいはログインしていない場合は <code class=\"docutils literal notranslate\">AnonymousUser</code> のインスタンス) を表します。</p></li>\n<li><p><code class=\"docutils literal notranslate\">perms</code> -- <code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.PermWrapper</code> のインスタンスで、現在ログイン中のユーザが有するパーミッションを表します。</p></li>\n</ul>\n</section>\n<section id=\"django-template-context-processors-debug\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.debug</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-debug\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.debug\">\n<span class=\"sig-name descname\">debug</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.debug\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は以下の 2 つの変数を含みます -- ただし、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> 設定が <code class=\"docutils literal notranslate\">True</code> でリクエストの IP アドレス (<code class=\"docutils literal notranslate\">request.META['REMOTE_ADDR']</code>) が <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INTERNAL_IPS\"><code class=\"xref std std-setting docutils literal notranslate\">INTERNAL_IPS</code></a> 設定内にある場合のみです:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">debug</code> -- <code class=\"docutils literal notranslate\">True</code> です。<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> モードかどうかをテストするためにテンプレート内で使うことができます。</p></li>\n<li><p><code class=\"docutils literal notranslate\">sql_queries</code> -- <code class=\"docutils literal notranslate\">{'sql': ..., 'time': ...}</code> ディクショナリのリストで、リクエスト中に発生した全ての SQL クエリとかかった時間を表します。リストはデータベースエイリアス順、クエリ順です。アクセス上でレイジーに生成されます。</p></li>\n</ul>\n</section>\n<section id=\"django-template-context-processors-i18n\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.i18n</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-i18n\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.i18n\">\n<span class=\"sig-name descname\">i18n</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.i18n\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は以下の変数を含みます:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">LANGUAGES</code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a> 設定の値です。</p></li>\n<li><p><code class=\"docutils literal notranslate\">LANGUAGE_BIDI</code> -- 現在の言語がヘブライ語やアラビア語などの右から左へ書く言語の場合、 <code class=\"docutils literal notranslate\">True</code> を返します。英語、フランス語、ドイツ語などの左から右へ書く言語の場合は <code class=\"docutils literal notranslate\">False</code> です。</p></li>\n<li><p><code class=\"docutils literal notranslate\">LANGUAGE_CODE</code> -- 存在する場合は <code class=\"docutils literal notranslate\">request.LANGUAGE_CODE</code> で、それ以外の場合は <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGE_CODE</code></a> 設定です。</p></li>\n</ul>\n<p>同じ値を生成するテンプレートタグについては <a class=\"reference internal\" href=\"/ja/5.0/topics/i18n/translation/#i18n-template-tags\"><span class=\"std std-ref\">i18n テンプレートタグ</span></a> を参照してください。</p>\n</section>\n<section id=\"django-template-context-processors-media\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.media</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-media\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は変数 <code class=\"docutils literal notranslate\">MEDIA_URL</code> を含みます。これは、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a> 設定の値を提供します。</p>\n</section>\n<section id=\"django-template-context-processors-static\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.static</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-static\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.static\">\n<span class=\"sig-name descname\">static</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.static\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は変数 <code class=\"docutils literal notranslate\">STATIC_URL</code> を含みます。これは、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> 設定の値を提供します。</p>\n</section>\n<section id=\"django-template-context-processors-csrf\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.csrf</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-csrf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>このプロセッサは、 <a class=\"reference internal\" href=\"/ja/5.0/ref/csrf/\"><span class=\"doc\">クロスサイトリクエストフォージェリ (CSRF)</span></a> 対策のための <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\">csrf_token</code></a> テンプレートタグが必要とするトークンを追加します。</p>\n</section>\n<section id=\"django-template-context-processors-request\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.request</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は変数``request`` を含みます。これは現在の <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> です。</p>\n</section>\n<section id=\"django-template-context-processors-tz\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.tz</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-tz\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.tz\">\n<span class=\"sig-name descname\">tz</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.tz\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は変数 <code class=\"docutils literal notranslate\">TIME_ZONE</code> を含みます。これは、現在アクティブなタイムゾーンの名前を提供します。</p>\n</section>\n<section id=\"django-contrib-messages-context-processors-messages\">\n<h4><code class=\"docutils literal notranslate\">django.contrib.messages.context_processors.messages</code><a class=\"heading-anchor\" href=\"#django-contrib-messages-context-processors-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>このプロセッサが有効な場合、全ての <code class=\"docutils literal notranslate\">RequestContext</code> は以下の 2 つの変数を含みます:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">messages</code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/\"><span class=\"doc\">メッセージフレームワーク</span></a> を通じてセットされた、(文字列としての) メッセージのリストです。</p></li>\n<li><p><code class=\"docutils literal notranslate\">DEFAULT_MESSAGE_LEVELS</code> -- <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/#message-level-constants\"><span class=\"std std-ref\">数値</span></a> のメッセージレベル名のマッピングです。</p></li>\n</ul>\n</section>\n</section>\n<section id=\"writing-your-own-context-processors\">\n<h3>独自のコンテキストプロセッサを記述する<a class=\"heading-anchor\" href=\"#writing-your-own-context-processors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>コンテキストプロセッサはシンプルなインタフェースを持っています。これは Python の関数で、 <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> オブジェクトを引数に取り、テンプレートコンテキストに追加される辞書を返します。</p>\n<p>たとえば、すべてのコンテキストに <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a> 設定を追加するには以下のようにします：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n\n\n<span class=\"k\">def</span> <span class=\"nf\">from_email</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;DEFAULT_FROM_EMAIL&quot;</span><span class=\"p\">:</span> settings<span class=\"o\">.</span>DEFAULT_FROM_EMAIL<span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>カスタムコンテキストプロセッサはコードベースのどこにあっても構いません。Django が気にするのは、カスタムコンテキストプロセッサが <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定の <code class=\"docutils literal notranslate\">'context_processors'</code> オプションで指されているかどうか、直接使っている場合は <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> の <code class=\"docutils literal notranslate\">context_processors</code> 引数で指されているかどうかだけです。</p>\n</section>\n</section>\n<section id=\"loading-templates\">\n<h2>テンプレートを読み込む<a class=\"heading-anchor\" href=\"#loading-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>通常、テンプレートは低レベルの <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> API を使うのではなく、ファイルシステム上のファイルに保存します。テンプレートは <strong>テンプレートディレクトリ</strong> として指定したディレクトリに保存します。</p>\n<p>Django はテンプレート読み込みの設定によって、様々な場所でテンプレートディレクトリを探しますが (後述の 「ローダの種類」を参照してください)、テンプレートディレクトリを指定する最も基本的な方法は <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> オプションを使うことです。</p>\n<section id=\"the-dirs-option\">\n<h3><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> オプション<a class=\"heading-anchor\" href=\"#the-dirs-option\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>設定ファイルの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定にある <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> オプション、または <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> の <code class=\"docutils literal notranslate\">dirs</code> 引数を使って、テンプレートディレクトリを Django に教えてください。これはテンプレートディレクトリへのフルパスを含む文字列のリストに設定する必要があります：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n            <span class=\"s2\">&quot;/home/html/templates/lawrence.com&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;/home/html/templates/default&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">],</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>ディレクトリとテンプレートがWebサーバーによって読み取れる限り、テンプレートはどこに置いても構いません。テンプレートの拡張子は <code class=\"docutils literal notranslate\">.html</code> や <code class=\"docutils literal notranslate\">.txt</code> など好きなものを使うことができます。</p>\n<p>これらのパスは、Windows でも Unix スタイルのスラッシュ (/) を使う必要があります。</p>\n</section>\n<section id=\"loader-types\">\n<span id=\"template-loaders\"></span><h3>ローダーの種類<a class=\"heading-anchor\" href=\"#loader-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>デフォルトでは、 Django はファイルシステムベースのテンプレートローダーを使いますが、 Django には、他のソースからテンプレートを読み込むことができる、他のテンプレートローダーがいくつか付属しています。</p>\n<p>これらのローダーのいくつかはデフォルトでは無効になっていますが、 <code class=\"docutils literal notranslate\">DjangoTemplates</code> バックエンドの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定に <code class=\"docutils literal notranslate\">'loaders'</code> オプションを追加するか、 <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> に <code class=\"docutils literal notranslate\">loaders</code> 引数を渡すことで有効にできます。 <code class=\"docutils literal notranslate\">loaders</code> は文字列かタプルのリストで、それぞれがテンプレートローダークラスを表します。以下は Django に付属のテンプレートローダーです：</p>\n<p><code class=\"docutils literal notranslate\">django.template.loaders.filesystem.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.filesystem.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">filesystem.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.filesystem.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> に従ってファイルシステムからテンプレートを読み込みます。</p>\n<p>このローダーはデフォルトで有効になっています。しかし、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> を空でないリストに設定しないとテンプレートを見つけられません：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>また、<code class=\"docutils literal notranslate\">'DIRS'</code> をオーバーライドして、特定のファイルシステムローダーに特定のディレクトリを指定することもできます：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.app_directories.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.app_directories.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">app_directories.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.app_directories.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ファイルシステム上の Django アプリからテンプレートを読み込みます。 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> にあるアプリごとに、ローダーは <code class=\"docutils literal notranslate\">templates</code> サブディレクトリを探します。そのディレクトリが存在すれば、 Django はその中にあるテンプレートを探します。</p>\n<p>つまり、テンプレートを個々のアプリと一緒に保存できます。 また、Django アプリをデフォルトのテンプレートと一緒に配布するのにも役立ちます。</p>\n<p>たとえば、この設定の場合：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;myproject.polls&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;myproject.music&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>...上記のようにすると、<code class=\"docutils literal notranslate\">get_template('foo.html')</code> はこれらのディレクトリの <code class=\"docutils literal notranslate\">foo.html</code> をこの順番で探します：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">/path/to/myproject/polls/templates/</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">/path/to/myproject/music/templates/</code></p></li>\n</ul>\n<p>...そして最初に見つけたものを使います。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> の順序は重要です！例えば、Django管理サイトをカスタマイズしたい場合、<code class=\"docutils literal notranslate\">django.contrib.admin</code> の標準テンプレート <code class=\"docutils literal notranslate\">admin/base_site.html</code> を、<code class=\"docutils literal notranslate\">myproject.polls</code> 内の独自の <code class=\"docutils literal notranslate\">admin/base_site.html</code> で上書きしたいかもしれません。その場合、<code class=\"docutils literal notranslate\">myproject.polls</code> が <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> で <code class=\"docutils literal notranslate\">django.contrib.admin</code> よりも <em>前に</em> 来るように確認する必要があります。そうしないと、<code class=\"docutils literal notranslate\">django.contrib.admin</code> のものが先にロードされ、あなたのものは無視されます。</p>\n<p>ローダーは最初に実行されるときに最適化を行うことに注意してください。それは、どの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> パッケージが <code class=\"docutils literal notranslate\">templates</code> サブディレクトリを持っているかのリストをキャッシュします。</p>\n<p>このローダーを有効にするには <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a> を <code class=\"docutils literal notranslate\">True</code>: に設定します：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.cached.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.cached.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">cached.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.cached.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django のテンプレートシステムは非常に高速ですが、テンプレートがレンダリングされるたびにテンプレートを読み込んでコンパイルする必要がある場合、そのオーバヘッドは増大する可能性があります。</p>\n<p>キャッシュされたテンプレートローダーは、それがラップすべき他のローダーのリストで構成されます。ラップされたローダーは、初めて遭遇した未知のテンプレートを見つけるために使用されます。その後、キャッシュされたローダーはコンパイルされた <code class=\"docutils literal notranslate\">Template</code> をメモリに保存します。同じテンプレートをロードするための後続のリクエストには、キャッシュされた <code class=\"docutils literal notranslate\">Template</code> インスタンスが返されます。</p>\n<p>このローダーは <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS['loaders']</code></a> が指定されていない場合に自動的に有効になります。</p>\n<p>カスタムテンプレートローダーでは、以下のような設定を使ってテンプレートのキャッシュを手動で指定できます：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.cached.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">[</span>\n                        <span class=\"s2\">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;django.template.loaders.app_directories.Loader&quot;</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;path.to.custom.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">],</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Django 組み込みのテンプレートタグはすべてキャッシュローダで安全に使えますが、サードパーティのパッケージや自分で書いたカスタムテンプレートタグを使う場合は、各タグの <code class=\"docutils literal notranslate\">Node</code> 実装がスレッドセーフであることを確認する必要があります。詳細は <a class=\"reference internal\" href=\"/ja/5.0/howto/custom-template-tags/#template-tag-thread-safety\"><span class=\"std std-ref\">テンプレートタグのスレッド安全性についての注意事項</span></a> を参照してください。</p>\n</aside>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.locmem.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.locmem.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">locmem.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.locmem.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Python 辞書からテンプレートを読み込みます。これはテストに便利です。</p>\n<p>このローダーはテンプレートの辞書を第一引数に取ります：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.locmem.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;content here&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">},</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>このローダーはデフォルトでは無効です。</p>\n</dd></dl>\n\n<p>Django は <code class=\"docutils literal notranslate\">'loaders'</code> オプションに従って、テンプレートローダーを順番に使用します。一致するローダーが見つかるまで、それぞれのローダーを使います。</p>\n</section>\n</section>\n<section id=\"custom-loaders\">\n<span id=\"custom-template-loaders\"></span><h2>カスタムローダー<a class=\"heading-anchor\" href=\"#custom-loaders\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>カスタムテンプレートローダーを使って、追加のソースからテンプレートをロードできます。カスタム <code class=\"docutils literal notranslate\">Loader</code> クラスは <code class=\"docutils literal notranslate\">django.template.loaders.base.Loader</code> を継承し、 <code class=\"docutils literal notranslate\">get_contents()</code> と <code class=\"docutils literal notranslate\">get_template_sources()</code> メソッドを定義する必要があります。</p>\n<section id=\"loader-methods\">\n<h3>ローダーのメソッド<a class=\"heading-anchor\" href=\"#loader-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ファイルシステムやデータベースなど、指定されたソースからテンプレートを読み込みます。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_template_sources\">\n<span class=\"sig-name descname\">get_template_sources</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_template_sources\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>テンプレート名 <code class=\"docutils literal notranslate\">template_name</code> を受け取り、 <a class=\"reference internal\" href=\"#django.template.base.Origin\" title=\"django.template.base.Origin\"><code class=\"xref py py-class docutils literal notranslate\">Origin</code></a> インスタンスを生成するメソッドです。</p>\n<p>例えば、ファイルシステムローダーは <code class=\"docutils literal notranslate\">template_name</code> 引数として <code class=\"docutils literal notranslate\">'index.html'</code> を受け取るかもしれません。このメソッドは、ローダーが見る各テンプレートディレクトリ内の <code class=\"docutils literal notranslate\">index.html</code> の完全なパスに対してオリジンを生成します。</p>\n<p>メソッドは与えられたパスにテンプレートが存在することを確認する必要はありませんが、パスが有効であることを確認する必要があります。例えば、ファイルシステムローダーはパスが有効なテンプレートディレクトリのもとにあることを確認します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_contents\">\n<span class=\"sig-name descname\">get_contents</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">origin</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_contents\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <a class=\"reference internal\" href=\"#django.template.base.Origin\" title=\"django.template.base.Origin\"><code class=\"xref py py-class docutils literal notranslate\">Origin</code></a> に対するテンプレートのコンテンツを返します。</p>\n<p>これは、ファイルシステムローダーがファイルシステムから内容を読み取る場所、またはデータベースローダーがデータベースから読み取る場所です。一致するテンプレートが存在しない場合、これは <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TemplateDoesNotExist</code></a> エラーを発生させるべきです。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_template\">\n<span class=\"sig-name descname\">get_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em>, <em class=\"sig-param\">skip<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_template_sources\" title=\"django.template.loaders.base.Loader.get_template_sources\"><code class=\"xref py py-meth docutils literal notranslate\">get_template_sources()</code></a> の結果をループして <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_contents\" title=\"django.template.loaders.base.Loader.get_contents\"><code class=\"xref py py-meth docutils literal notranslate\">get_contents()</code></a> を呼び出すことで、与えられた <code class=\"docutils literal notranslate\">template_name</code> に対応する <code class=\"docutils literal notranslate\">Template</code> オブジェクトを返します。これは最初にマッチしたテンプレートを返します。テンプレートが見つからない場合、 <a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TemplateDoesNotExist</code></a> が発生します。</p>\n<p>オプションの <code class=\"docutils literal notranslate\">skip</code> 引数はテンプレートを拡張するときに無視するオリジンのリストです。これにより、テンプレートが同じ名前の他のテンプレートを継承できるようになります。また、再帰エラーを回避するためにも使用されます。</p>\n<p>通常、カスタムテンプレートローダーは <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_template_sources\" title=\"django.template.loaders.base.Loader.get_template_sources\"><code class=\"xref py py-meth docutils literal notranslate\">get_template_sources()</code></a> と <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_contents\" title=\"django.template.loaders.base.Loader.get_contents\"><code class=\"xref py py-meth docutils literal notranslate\">get_contents()</code></a> を定義すれば十分です。 <code class=\"docutils literal notranslate\">get_template()</code> は通常オーバーライドする必要はありません。</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition-building-your-own admonition\" role=\"note\">\n<p class=\"admonition-title\">自作する場合</p>\n<p>例については、 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/template/loaders\">Django の組み込みローダーのソースコード</a> を読んでください。</p>\n</aside>\n</section>\n</section>\n<section id=\"template-origin\">\n<h2>テンプレート・オリジン<a class=\"heading-anchor\" href=\"#template-origin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>テンプレートは読み込むソースに応じた属性を含む <code class=\"docutils literal notranslate\">origin</code> を持ちます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Origin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">loader<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.name\">\n<span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>テンプレートローダーが返すテンプレートへのパス。ファイルシステムから読み込むローダーの場合、これはテンプレートへのフルパスです。</p>\n<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class=\"docutils literal notranslate\">&lt;unknown_source&gt;</code> という文字列値となります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>テンプレートローダーに渡されるテンプレートへの相対パス。</p>\n<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class=\"docutils literal notranslate\">None</code> です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.loader\">\n<span class=\"sig-name descname\">loader</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>この <code class=\"docutils literal notranslate\">Origin</code> を構築したテンプレートローダーインスタンス。</p>\n<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class=\"docutils literal notranslate\">None</code> です。</p>\n<p><a class=\"reference internal\" href=\"#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\">django.template.loaders.cached.Loader</code></a> は、ラップされたローダー全てにこの属性を要求します。通常、 <code class=\"docutils literal notranslate\">Origin</code> を <code class=\"docutils literal notranslate\">loader=self</code> でインスタンス化します。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>","rootId":"the-django-template-language-for-python-programmers","toc":[{"title":"概要","anchor":"overview","children":[]},{"title":"エンジンを設定する","anchor":"configuring-an-engine","children":[]},{"title":"テンプレートを読み込む","anchor":"loading-a-template","children":[]},{"title":"コンテキストをレンダリングする","anchor":"rendering-a-context","children":[{"title":"変数とルックアップ","anchor":"variables-and-lookups","children":[]},{"title":"無効な変数の扱い","anchor":"how-invalid-variables-are-handled","children":[]},{"title":"組み込み変数","anchor":"built-in-variables","children":[]},{"title":"文字列リテラルの制約","anchor":"limitations-with-string-literals","children":[]}]},{"title":"Context オブジェクトを使って遊ぶ","anchor":"playing-with-context-objects","children":[{"title":"RequestContext を使う","anchor":"using-requestcontext","children":[]},{"title":"ビルトインのテンプレートコンテキストプロセッサ","anchor":"built-in-template-context-processors","children":[{"title":"django.contrib.auth.context_processors.auth","anchor":"django-contrib-auth-context-processors-auth","children":[]},{"title":"django.template.context_processors.debug","anchor":"django-template-context-processors-debug","children":[]},{"title":"django.template.context_processors.i18n","anchor":"django-template-context-processors-i18n","children":[]},{"title":"django.template.context_processors.media","anchor":"django-template-context-processors-media","children":[]},{"title":"django.template.context_processors.static","anchor":"django-template-context-processors-static","children":[]},{"title":"django.template.context_processors.csrf","anchor":"django-template-context-processors-csrf","children":[]},{"title":"django.template.context_processors.request","anchor":"django-template-context-processors-request","children":[]},{"title":"django.template.context_processors.tz","anchor":"django-template-context-processors-tz","children":[]},{"title":"django.contrib.messages.context_processors.messages","anchor":"django-contrib-messages-context-processors-messages","children":[]}]},{"title":"独自のコンテキストプロセッサを記述する","anchor":"writing-your-own-context-processors","children":[]}]},{"title":"テンプレートを読み込む","anchor":"loading-templates","children":[{"title":"DIRS オプション","anchor":"the-dirs-option","children":[]},{"title":"ローダーの種類","anchor":"loader-types","children":[]}]},{"title":"カスタムローダー","anchor":"custom-loaders","children":[{"title":"ローダーのメソッド","anchor":"loader-methods","children":[]}]},{"title":"テンプレート・オリジン","anchor":"template-origin","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.0/ref/"},{"docname":"ref/templates/index","title":"テンプレート","url":"/ja/5.0/ref/templates/"}],"prev":{"docname":"ref/templates/builtins","title":"組み込みテンプレートタグとフィルタ","url":"/ja/5.0/ref/templates/builtins/"},"next":{"docname":"ref/template-response","title":"TemplateResponse および SimpleTemplateResponse","url":"/ja/5.0/ref/template-response/"},"formats":{"html":"/ja/5.0/ref/templates/api/","markdown":"/ja/5.0/ref/templates/api.md","json":"/ja/5.0/ref/templates/api.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/templates/api.txt","official":"https://docs.djangoproject.com/ja/5.0/ref/templates/api/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}