<!DOCTYPE html>

<html lang="ja" data-content_root="../../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Python プログラマーのための Django テンプレート言語 &#8212; Django 5.2.9 ドキュメント</title>
    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=34bb78ad" />
    <link rel="stylesheet" type="text/css" href="../../_static/default.css?v=bf4d74af" />
    <script src="../../_static/documentation_options.js?v=871dbda0"></script>
    <script src="../../_static/doctools.js?v=9bcbadda"></script>
    <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
    <script src="../../_static/translations.js?v=4755f45a"></script>
    <link rel="index" title="索引" href="../../genindex.html" />
    <link rel="search" title="検索" href="../../search.html" />
    <link rel="next" title="TemplateResponse および SimpleTemplateResponse" href="../template-response.html" />
    <link rel="prev" title="組み込みテンプレートタグとフィルタ" href="builtins.html" />



 
<script src="../../templatebuiltins.js"></script>
<script>
(function($) {
    if (!django_template_builtins) {
       // templatebuiltins.js missing, do nothing.
       return;
    }
    $(document).ready(function() {
        // Hyperlink Django template tags and filters
        var base = "builtins.html";
        if (base == "#") {
            // Special case for builtins.html itself
            base = "";
        }
        // Tags are keywords, class '.k'
        $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
             var tagname = $(elem).text();
             if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
                 var fragment = tagname.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
             }
        });
        // Filters are functions, class '.nf'
        $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
             var filtername = $(elem).text();
             if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
                 var fragment = filtername.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
             }
        });
    });
})(jQuery);</script>

  </head><body>

    <div class="document">
  <div id="custom-doc" class="yui-t6">
    <div id="hd">
      <h1><a href="../../index.html">Django 5.2.9 ドキュメント</a></h1>
      <div id="global-nav">
        <a title="Home page" href="../../index.html">Home</a>  |
        <a title="Table of contents" href="../../contents.html">Table of contents</a>  |
        <a title="Global index" href="../../genindex.html">Index</a>  |
        <a title="Module index" href="../../py-modindex.html">Modules</a>
      </div>
      <div class="nav">
    &laquo; <a href="builtins.html" title="組み込みテンプレートタグとフィルタ">previous</a>
     |
    <a href="../index.html" title="API リファレンス" accesskey="U">up</a>
   |
    <a href="../template-response.html" title="&lt;code class=&#34;docutils literal notranslate&#34;&gt;&lt;span class=&#34;pre&#34;&gt;TemplateResponse&lt;/span&gt;&lt;/code&gt; および &lt;code class=&#34;docutils literal notranslate&#34;&gt;&lt;span class=&#34;pre&#34;&gt;SimpleTemplateResponse&lt;/span&gt;&lt;/code&gt;">next</a> &raquo;</div>
    </div>

    <div id="bd">
      <div id="yui-main">
        <div class="yui-b">
          <div class="yui-g" id="ref-templates-api">
            
  <section id="s-the-django-template-language-for-python-programmers">
<span id="the-django-template-language-for-python-programmers"></span><h1>Python プログラマーのための Django テンプレート言語<a class="headerlink" href="#the-django-template-language-for-python-programmers" title="Link to this heading">¶</a></h1>
<p>この文書は Django テンプレートシステムがどのように動作し、どのように拡張するか、技術的な観点から説明します。構文に関するリファレンスを探しているなら、 <a class="reference internal" href="language.html"><span class="doc">Django テンプレート言語</span></a> を参照してください。</p>
<p>テンプレート、 コンテキスト、変数、タグ、レンダリングについての理解を前提としています。これらの概念に馴染みがなければ、 <a class="reference internal" href="../../topics/templates.html#template-language-intro"><span class="std std-ref">Django テンプレート言語入門</span></a> からスタートしてください。</p>
<section id="s-overview">
<span id="overview"></span><h2>概要<a class="headerlink" href="#overview" title="Link to this heading">¶</a></h2>
<p>Pythonでテンプレートシステムを使うには3つのステップがあります：</p>
<ol class="arabic simple">
<li><p><a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> を設定します。</p></li>
<li><p>テンプレートコードを <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> にコンパイルします。</p></li>
<li><p>テンプレートを <a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> においてレンダリングします。</p></li>
</ol>
<p>これらの各ステップで、Django プロジェクトは通常、テンプレートシステムの低レベルの API ではなく、 <a class="reference internal" href="../../topics/templates.html#template-engines"><span class="std std-ref">バックエンドに依存しない高レベルの API</span></a> に依存しています：</p>
<ol class="arabic simple">
<li><p><a class="reference internal" href="../settings.html#std-setting-TEMPLATES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">TEMPLATES</span></code></a> 設定の中で、各 <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> バックエンドに対して、Djangoは <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> をインスタンス化します。<a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> は <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> をラップし、共通のテンプレートバックエンドAPIに適応させます。</p></li>
<li><p><a class="reference internal" href="../../topics/templates.html#module-django.template.loader" title="django.template.loader"><code class="xref py py-mod docutils literal notranslate"><span class="pre">django.template.loader</span></code></a> モジュールはテンプレートを読み込むための <a class="reference internal" href="../../topics/templates.html#django.template.loader.get_template" title="django.template.loader.get_template"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_template()</span></code></a> のなどの関数を提供します。これらは実際の <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">django.template.Template</span></code></a> をラップした <code class="docutils literal notranslate"><span class="pre">django.template.backends.django.Template</span></code> を返します。</p></li>
<li><p>前のステップで取得した <code class="docutils literal notranslate"><span class="pre">Template</span></code> には <a class="reference internal" href="../../topics/templates.html#django.template.backends.base.Template.render" title="django.template.backends.base.Template.render"><code class="xref py py-meth docutils literal notranslate"><span class="pre">render()</span></code></a> メソッドがあり、コンテキストと場合によってはリクエストを <a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> に集約し、その下にある <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> にレンダリングを委譲します。</p></li>
</ol>
</section>
<section id="s-configuring-an-engine">
<span id="configuring-an-engine"></span><h2>エンジンを設定する<a class="headerlink" href="#configuring-an-engine" title="Link to this heading">¶</a></h2>
<p>もし <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> バックエンドを使っているのであれば、これはおそらくあなたが探しているドキュメントではありません。後述する <code class="docutils literal notranslate"><span class="pre">Engine</span></code> クラスのインスタンスには、そのバックエンドの <code class="docutils literal notranslate"><span class="pre">engine</span></code> 属性を使ってアクセスすることができ、後述する属性のデフォルトは <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> で渡されたもので上書きされます。</p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.Engine">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Engine</span></span>(<em class="sig-param"><span class="n"><span class="pre">dirs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">app_dirs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context_processors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">debug</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loaders</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string_if_invalid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file_charset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'utf-8'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">libraries</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">builtins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">autoescape</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/engine.py#L13"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Engine" title="Link to this definition">¶</a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">Engine</span></code> をインスタンス化する際は、すべての引数をキーワード引数として渡す必要があります：</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">dirs</span></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"><span class="pre">filesystem.Loader</span></code></a> を設定するために使用されます。</p>
<p>デフォルトは空のリストです。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">app_dirs</span></code> は <code class="docutils literal notranslate"><span class="pre">loaders</span></code> のデフォルト値にだけ影響します。下記を参照してください。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">False</span></code> です。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">autoescape</span></code> はHTMLのオートエスケープを有効にするかどうかをコントロールします。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">True</span></code> です。</p>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p>HTML以外のテンプレートをレンダリングする場合のみ <code class="docutils literal notranslate"><span class="pre">False</span></code> に設定してください！</p>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">'context_processors'</span></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"><span class="pre">dict</span></code></a> を返します。</p>
<p>デフォルトは空のリストです。</p>
<p>詳しくは <a class="reference internal" href="#django.template.RequestContext" title="django.template.RequestContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">RequestContext</span></code></a> を参照してください。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">debug</span></code> はテンプレートのデバッグモードのオン/オフを切り替える真偽値です。もし <code class="docutils literal notranslate"><span class="pre">True</span></code> なら、テンプレートエンジンは追加のデバッグ情報を保存し、テンプレートのレンダリング中に例外が発生した場合に詳細なレポートを表示できます。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">False</span></code> です。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">loaders</span></code> はテンプレートローダクラスのリストで、文字列で指定します。各 <code class="docutils literal notranslate"><span class="pre">Loader</span></code> クラスは特定のソースからテンプレートをインポートする方法を知っています。任意で、文字列の代わりにタプルを使うこともできます。タプルの最初の項目は <code class="docutils literal notranslate"><span class="pre">Loader</span></code> クラス名で、それ以降の項目は初期化時に <code class="docutils literal notranslate"><span class="pre">Loader</span></code> に渡されます。</p>
<p>リストにはデフォルトでは下記が含まれます：</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">'django.template.loaders.filesystem.Loader'</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">'django.template.loaders.app_directories.Loader'</span></code> 、これが含まれるのは <code class="docutils literal notranslate"><span class="pre">app_dirs</span></code> が <code class="docutils literal notranslate"><span class="pre">True</span></code> の場合だけです。</p></li>
</ul>
<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"><span class="pre">django.template.loaders.cached.Loader</span></code></a> でラップされます。</p>
<p>詳しくは <a class="reference internal" href="#template-loaders"><span class="std std-ref">ローダーの種類</span></a> を参照してください。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">'string_if_invalid'</span></code> は、無効な(例えばスペルミスのある)変数に対してテンプレートシステムが使用する文字列です。</p>
<p>デフォルトは空文字列です。</p>
<p>詳しくは <a class="reference internal" href="#invalid-template-variables"><span class="std std-ref">無効な変数の扱い</span></a> を参照してください。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">'file_charset'</span></code> は、ディスク上のテンプレートファイルを読み込む際に使用する文字セットです。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">'utf-8'</span></code> です。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">'libraries'</span></code>: テンプレートエンジンに登録するテンプレートタグモジュールのラベルとドット区切りPythonパスの辞書。これは新しいライブラリを追加したり、既存のライブラリの代替ラベルを提供するために使用します。たとえば下記のように：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Engine</span><span class="p">(</span>
    <span class="n">libraries</span><span class="o">=</span><span class="p">{</span>
        <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>
        <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>
    <span class="p">},</span>
<span class="p">)</span>
</pre></div>
</div>
<p><a class="reference internal" href="builtins.html#std-templatetag-load"><code class="xref std std-ttag docutils literal notranslate"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">%}</span></code></a> タグに対応する辞書のキーを渡すことでライブラリをロードできます。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">'builtins'</span></code>: <a class="reference internal" href="builtins.html"><span class="doc">ビルトイン</span></a> に追加するテンプレートタグモジュールのドット区切りPythonパスのリストです。たとえば:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Engine</span><span class="p">(</span>
    <span class="n">builtins</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;myapp.builtins&quot;</span><span class="p">],</span>
<span class="p">)</span>
</pre></div>
</div>
<p><a class="reference internal" href="builtins.html#std-templatetag-load"><code class="xref std std-ttag docutils literal notranslate"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">%}</span></code></a> タグを呼び出さなくても、組み込みライブラリのタグやフィルタを使うことができます。</p>
</li>
</ul>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Engine.get_default">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">Engine.</span></span><span class="sig-name descname"><span class="pre">get_default</span></span>()<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/engine.py#L89"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Engine.get_default" title="Link to this definition">¶</a></dt>
<dd><p>最初に設定された <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> エンジンから <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> を返します。エンジンが設定されていない場合、 <a class="reference internal" href="../exceptions.html#django.core.exceptions.ImproperlyConfigured" title="django.core.exceptions.ImproperlyConfigured"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ImproperlyConfigured</span></code></a> を発生させます。</p>
<p>これは、グローバルに利用可能で、暗黙的に設定されたエンジンに依存するAPIを保持するために必要です。それ以外の使用は強く推奨されません。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Engine.from_string">
<span class="sig-prename descclassname"><span class="pre">Engine.</span></span><span class="sig-name descname"><span class="pre">from_string</span></span>(<em class="sig-param"><span class="n"><span class="pre">template_code</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/engine.py#L165"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Engine.from_string" title="Link to this definition">¶</a></dt>
<dd><p>与えられたテンプレートコードをコンパイルして <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> オブジェクトを返します。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Engine.get_template">
<span class="sig-prename descclassname"><span class="pre">Engine.</span></span><span class="sig-name descname"><span class="pre">get_template</span></span>(<em class="sig-param"><span class="n"><span class="pre">template_name</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/engine.py#L172"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Engine.get_template" title="Link to this definition">¶</a></dt>
<dd><p>与えられた名前のテンプレートを読み込んでコンパイルし、 <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> オブジェクトを返します。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Engine.select_template">
<span class="sig-prename descclassname"><span class="pre">Engine.</span></span><span class="sig-name descname"><span class="pre">select_template</span></span>(<em class="sig-param"><span class="n"><span class="pre">template_name_list</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/engine.py#L219"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Engine.select_template" title="Link to this definition">¶</a></dt>
<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"><span class="pre">get_template()</span></code></a> と同様ですが、名前のリストを受け取り、最初に見つかったテンプレートを返します。</p>
</dd></dl>

</section>
<section id="s-loading-a-template">
<span id="loading-a-template"></span><h2>テンプレートを読み込む<a class="headerlink" href="#loading-a-template" title="Link to this heading">¶</a></h2>
<p><a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> を作成する推奨される方法は <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></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"><span class="pre">get_template()</span></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"><span class="pre">select_template()</span></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"><span class="pre">from_string()</span></code></a> を指します。</p>
<p><a class="reference internal" href="../settings.html#std-setting-TEMPLATES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">TEMPLATES</span></code></a> 設定で <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> エンジンが定義されている Django プロジェクトでは、 <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> を直接インスタンス化できます。複数の <a class="reference internal" href="../../topics/templates.html#django.template.backends.django.DjangoTemplates" title="django.template.backends.django.DjangoTemplates"><code class="xref py py-class docutils literal notranslate"><span class="pre">DjangoTemplates</span></code></a> エンジンが定義されている場合、最初のものが使用されます。</p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.Template">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Template</span></span><a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/base.py#L141"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Template" title="Link to this definition">¶</a></dt>
<dd><p>このクラスは <code class="docutils literal notranslate"><span class="pre">django.template.Template</span></code> にあります。コンストラクタは1つの引数（生のテンプレートコード）を取ります：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">Template</span>

<span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;My name is {{ my_name }}.&quot;</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>

<div class="admonition-behind-the-scenes admonition">
<p class="admonition-title">背景</p>
<p>システムは生のテンプレートコードを一度だけ解析します。 <code class="docutils literal notranslate"><span class="pre">Template</span></code> オブジェクトを作成するときです。それ以降は、パフォーマンスのために内部的にツリー構造として保存されます。</p>
<p>構文解析自体も非常に高速です。構文解析のほとんどは、1つの短い正規表現を呼び出すだけで行われます。</p>
</div>
</section>
<section id="s-rendering-a-context">
<span id="rendering-a-context"></span><h2>コンテキストをレンダリングする<a class="headerlink" href="#rendering-a-context" title="Link to this heading">¶</a></h2>
<p>一度コンパイルされた <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> オブジェクトがあれば、それを使ってコンテキストをレンダリングできます。同じテンプレートを再利用して、異なるコンテキストで何度でもレンダリングできます。</p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.Context">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Context</span></span>(<em class="sig-param"><span class="n"><span class="pre">dict_</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">autoescape</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_l10n</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_tz</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context.py#L141"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Context" title="Link to this definition">¶</a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">django.template.Context</span></code> のコンストラクタは、オプションの引数（変数名と変数の値をマッピングした辞書）を取ります。</p>
<p>3つのオプションのキーワード引数も指定できます：</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">autoescape</span></code> はHTMLのオートエスケープを有効にするかどうかをコントロールします。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">True</span></code> です。</p>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p>HTML以外のテンプレートをレンダリングする場合のみ <code class="docutils literal notranslate"><span class="pre">False</span></code> に設定してください！</p>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">use_l10n</span></code> は、値がデフォルトでローカライズされるかどうかを上書きします。<code class="docutils literal notranslate"><span class="pre">True</span></code> に設定すると、数値や日付はロケールに基づいてフォーマットされます。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">None</span></code> です。</p>
<p>詳細は <a class="reference internal" href="../../topics/i18n/formatting.html#topic-l10n-templates"><span class="std std-ref">テンプレート内でローカライズをコントロールする</span></a> を参照してください。</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">use_tz</span></code> は、日付がテンプレートで表示される際にローカル時間に変換されるかどうかを上書きします。<code class="docutils literal notranslate"><span class="pre">True</span></code> に設定すると、すべての日付がローカルタイムゾーンを使用して表示されます。これは <a class="reference internal" href="../settings.html#std-setting-USE_TZ"><code class="xref std std-setting docutils literal notranslate"><span class="pre">USE_TZ</span></code></a> よりも優先されます。</p>
<p>デフォルトは <code class="docutils literal notranslate"><span class="pre">None</span></code> です。</p>
<p>詳細は <a class="reference internal" href="../../topics/i18n/timezones.html#time-zones-in-templates"><span class="std std-ref">テンプレートでのタイムゾーン aware な出力</span></a> を参照してください。</p>
</li>
</ul>
<p>使用例については、下記の <a class="reference internal" href="#playing-with-context"><span class="std std-ref">Context オブジェクトを使って遊ぶ</span></a> を参照してください。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Template.render">
<span class="sig-prename descclassname"><span class="pre">Template.</span></span><span class="sig-name descname"><span class="pre">render</span></span>(<em class="sig-param"><span class="n"><span class="pre">context</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/base.py#L168"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Template.render" title="Link to this definition">¶</a></dt>
<dd><p><a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> を指定して <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> オブジェクトの <code class="docutils literal notranslate"><span class="pre">render()</span></code> メソッドを呼び出します：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">Context</span><span class="p">,</span> <span class="n">Template</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;My name is {{ my_name }}.&quot;</span><span class="p">)</span>

<span class="gp">&gt;&gt;&gt; </span><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
<span class="go">&quot;My name is Adrian.&quot;</span>

<span class="gp">&gt;&gt;&gt; </span><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
<span class="go">&quot;My name is Dolores.&quot;</span>
</pre></div>
</div>
</dd></dl>

<section id="s-variables-and-lookups">
<span id="variables-and-lookups"></span><h3>変数とルックアップ<a class="headerlink" href="#variables-and-lookups" title="Link to this heading">¶</a></h3>
<p>変数名はアルファベット(A-Z)、数字(0-9)、アンダースコア(ただしアンダースコアで始まってはならない)、ドットで構成されていなければなりません。</p>
<p>ドットはテンプレートレンダリングにおいて特別な意味を持ちます。変数名のドットは <strong>ルックアップ</strong> を意味します。具体的には、テンプレートシステムが変数名でドットを見つけると、以下の順番でルックアップを試みます：</p>
<ul class="simple">
<li><p>辞書のルックアップ。例： <code class="docutils literal notranslate"><span class="pre">foo[&quot;bar&quot;]</span></code></p></li>
<li><p>属性のルックアップ。例： <code class="docutils literal notranslate"><span class="pre">foo.bar</span></code></p></li>
<li><p>リストインデックスのルックアップ。例： <code class="docutils literal notranslate"><span class="pre">foo[bar]</span></code></p></li>
</ul>
<p>テンプレートコンテキストに変数 &quot;bar &quot;が存在する場合、<code class="docutils literal notranslate"><span class="pre">{{</span> <span class="pre">foo.bar</span> <span class="pre">}}</span></code> のようなテンプレート式中の &quot;bar &quot;はリテラル文字列として解釈され、変数 &quot;bar&quot; の値は使用されないことに注意してください。</p>
<p>テンプレートシステムは、最初に機能するルックアップ・タイプを使用します。これは短絡ロジックです。以下はその例です：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">Context</span><span class="p">,</span> <span class="n">Template</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;My name is {{ person.first_name }}.&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
<span class="go">&quot;My name is Joe.&quot;</span>

<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">PersonClass</span><span class="p">:</span>
<span class="gp">... </span>    <span class="k">pass</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">PersonClass</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span><span class="o">.</span><span class="n">first_name</span> <span class="o">=</span> <span class="s2">&quot;Ron&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span><span class="o">.</span><span class="n">last_name</span> <span class="o">=</span> <span class="s2">&quot;Nasty&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">({</span><span class="s2">&quot;person&quot;</span><span class="p">:</span> <span class="n">p</span><span class="p">}))</span>
<span class="go">&quot;My name is Ron.&quot;</span>

<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;The first stooge in the list is {{ stooges.0 }}.&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="go">&quot;The first stooge in the list is Larry.&quot;</span>
</pre></div>
</div>
<p>もし変数のどれかが呼び出し可能オブジェクトであれば、テンプレートシステムは呼び出しを試みます。例：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">PersonClass2</span><span class="p">:</span>
<span class="gp">... </span>    <span class="k">def</span><span class="w"> </span><span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="gp">... </span>        <span class="k">return</span> <span class="s2">&quot;Samantha&quot;</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;My name is {{ person.name }}.&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">({</span><span class="s2">&quot;person&quot;</span><span class="p">:</span> <span class="n">PersonClass2</span><span class="p">}))</span>
<span class="go">&quot;My name is Samantha.&quot;</span>
</pre></div>
</div>
<p>呼び出し可能な変数は、単純なルックアップしか必要としない変数よりも少し複雑です。以下に注意すべき点を示します：</p>
<ul>
<li><p>この変数が呼び出されたときに例外が発生した場合、例外が <code class="docutils literal notranslate"><span class="pre">silent_variable_failure</span></code> 属性の値が <code class="docutils literal notranslate"><span class="pre">True</span></code> でない限り、例外は伝播します。例外に <code class="docutils literal notranslate"><span class="pre">silent_variable_failure</span></code> 属性があり、その値が <code class="docutils literal notranslate"><span class="pre">True</span></code> である場合、その変数はエンジンの <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> 設定オプションの値（デフォルトでは空文字列）としてレンダリングされます。例：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;My name is {{ person.first_name }}.&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">PersonClass3</span><span class="p">:</span>
<span class="gp">... </span>    <span class="k">def</span><span class="w"> </span><span class="nf">first_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<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>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">PersonClass3</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">({</span><span class="s2">&quot;person&quot;</span><span class="p">:</span> <span class="n">p</span><span class="p">}))</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">AssertionError</span>: <span class="n">foo</span>

<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">SilentAssertionError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="gp">... </span>    <span class="n">silent_variable_failure</span> <span class="o">=</span> <span class="kc">True</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">PersonClass4</span><span class="p">:</span>
<span class="gp">... </span>    <span class="k">def</span><span class="w"> </span><span class="nf">first_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="gp">... </span>        <span class="k">raise</span> <span class="n">SilentAssertionError</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">PersonClass4</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">({</span><span class="s2">&quot;person&quot;</span><span class="p">:</span> <span class="n">p</span><span class="p">}))</span>
<span class="go">&quot;My name is .&quot;</span>
</pre></div>
</div>
<p><a class="reference internal" href="../exceptions.html#django.core.exceptions.ObjectDoesNotExist" title="django.core.exceptions.ObjectDoesNotExist"><code class="xref py py-exc docutils literal notranslate"><span class="pre">django.core.exceptions.ObjectDoesNotExist</span></code></a> はすべての Django データベース API の <code class="docutils literal notranslate"><span class="pre">DoesNotExist</span></code> 例外用の基本クラスですが、 <code class="docutils literal notranslate"><span class="pre">silent_variable_failure</span> <span class="pre">=</span> <span class="pre">True</span></code> を持っていることに注意してください。そのため、 Django モデルオブジェクトで Django テンプレートを使っている場合、 <code class="docutils literal notranslate"><span class="pre">DoesNotExist</span></code> 例外はすべてサイレントエラーになります。</p>
</li>
<li><p>変数は必要な引数がない場合のみ呼び出すことができます。そうでない場合、システムはエンジンの <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> オプションの値を返します。</p></li>
</ul>
<ul id="alters-data-description">
<li><p>いくつかの変数を呼び出すときに副作用が発生する可能性があり、テンプレートシステムがそれらにアクセスできるようにするのは愚策またはセキュリティホールと言えます。</p>
<p>良い例が、各 Django モデルオブジェクトの <a class="reference internal" href="../models/instances.html#django.db.models.Model.delete" title="django.db.models.Model.delete"><code class="xref py py-meth docutils literal notranslate"><span class="pre">delete()</span></code></a> メソッドです。テンプレートシステムはこのようなことをしてはいけません：</p>
<div class="highlight-html+django notranslate"><div class="highlight"><pre><span></span>I will now delete this valuable data. <span class="cp">{{</span> <span class="nv">data.delete</span> <span class="cp">}}</span>
</pre></div>
</div>
<p>To prevent this, set an <code class="docutils literal notranslate"><span class="pre">alters_data</span></code> attribute on the callable
variable. The template system won't call a variable if it has
<code class="docutils literal notranslate"><span class="pre">alters_data=True</span></code> set, and will instead replace the variable with
<code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code>, unconditionally. The
dynamically-generated <a class="reference internal" href="../models/instances.html#django.db.models.Model.delete" title="django.db.models.Model.delete"><code class="xref py py-meth docutils literal notranslate"><span class="pre">delete()</span></code></a> and
<a class="reference internal" href="../models/instances.html#django.db.models.Model.save" title="django.db.models.Model.save"><code class="xref py py-meth docutils literal notranslate"><span class="pre">save()</span></code></a> methods on Django model objects get
<code class="docutils literal notranslate"><span class="pre">alters_data=True</span></code> automatically. Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">sensitive_function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
    <span class="bp">self</span><span class="o">.</span><span class="n">database_record</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>


<span class="n">sensitive_function</span><span class="o">.</span><span class="n">alters_data</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</li>
<li><p>Occasionally you may want to turn off this feature for other reasons,
and tell the template system to leave a variable uncalled no matter
what. To do so, set a <code class="docutils literal notranslate"><span class="pre">do_not_call_in_templates</span></code> attribute on the
callable with the value <code class="docutils literal notranslate"><span class="pre">True</span></code>. The template system then will act as
if your variable is not callable (allowing you to access attributes of
the callable, for example).</p></li>
</ul>
</section>
<section id="s-how-invalid-variables-are-handled">
<span id="s-invalid-template-variables"></span><span id="how-invalid-variables-are-handled"></span><span id="invalid-template-variables"></span><h3>無効な変数の扱い<a class="headerlink" href="#how-invalid-variables-are-handled" title="Link to this heading">¶</a></h3>
<p>通常、変数が存在しない場合、テンプレートシステムはエンジンの <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> 設定オプションの値を挿入します。</p>
<p><code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> が <code class="docutils literal notranslate"><span class="pre">''</span></code> (空文字列) に設定されている場合のみ、無効な変数に適用されるフィルタが適用されます。もし <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> が他の値に設定されている場合、変数フィルタは無視されます。</p>
<p>この動作は <code class="docutils literal notranslate"><span class="pre">if</span></code>, <code class="docutils literal notranslate"><span class="pre">for</span></code>, <code class="docutils literal notranslate"><span class="pre">regroup</span></code> のテンプレートタグでは少し異なります。これらのテンプレートタグに無効な変数が指定された場合、その変数は <code class="docutils literal notranslate"><span class="pre">None</span></code> として解釈されます。これらのテンプレートタグ内の無効な変数には常にフィルタが適用されます。</p>
<p>もし <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> が <code class="docutils literal notranslate"><span class="pre">'%s'</span></code> を含む場合、フォーマットマーカーは無効な変数名に置き換えられます。</p>
<div class="admonition-for-debug-purposes-only admonition">
<p class="admonition-title">デバッグ専用です！</p>
<p><code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> は便利なデバッグツールですが、「開発のデフォルト」としてオンにするのはよくありません。</p>
<p>Django 組み込みのものを含む多くのテンプレートは、存在しない変数に遭遇した場合、テ ンプレートシステムの沈黙に依存しています。もし <code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> に <code class="docutils literal notranslate"><span class="pre">''</span></code> 以外の値を代入すると、これらのテンプレートやサイトでレンダリングの問題が発生します。</p>
<p>通常、<code class="docutils literal notranslate"><span class="pre">string_if_invalid</span></code> は特定のテンプレートの問題をデバッグするためだけに有効にし、デバッグが完了したらオフにすべきです。</p>
</div>
</section>
<section id="s-built-in-variables">
<span id="built-in-variables"></span><h3>組み込み変数<a class="headerlink" href="#built-in-variables" title="Link to this heading">¶</a></h3>
<p>すべてのコンテキストは <code class="docutils literal notranslate"><span class="pre">True</span></code>, <code class="docutils literal notranslate"><span class="pre">False</span></code>, <code class="docutils literal notranslate"><span class="pre">None</span></code> を含みます。ご想像の通り、これらの変数は対応する Python オブジェクトに解決されます。</p>
</section>
<section id="s-limitations-with-string-literals">
<span id="limitations-with-string-literals"></span><h3>文字列リテラルの制約<a class="headerlink" href="#limitations-with-string-literals" title="Link to this heading">¶</a></h3>
<p>Django のテンプレート言語には、独自の構文に使われる文字をエスケープする手段がありません。例えば、 <code class="docutils literal notranslate"><span class="pre">{%</span></code> や <code class="docutils literal notranslate"><span class="pre">%}</span></code> のような文字列を出力する必要がある場合は、 <a class="reference internal" href="builtins.html#std-templatetag-templatetag"><code class="xref std std-ttag docutils literal notranslate"><span class="pre">templatetag</span></code></a> タグが必要です。</p>
<p>これらのシーケンスをテンプレートフィルタやタグの引数に含めたい場合にも、同じような問題があります。例えば、ブロックタグを解析するとき、 Django のテンプレートパーサは <code class="docutils literal notranslate"><span class="pre">{%</span></code> の後に <code class="docutils literal notranslate"><span class="pre">%}</span></code> が最初に現れるかどうかを調べます。これは <code class="docutils literal notranslate"><span class="pre">&quot;%}&quot;</span></code> が文字列リテラルとして使われるのを阻止します。たとえば、以下のような式では <code class="docutils literal notranslate"><span class="pre">TemplateSyntaxError</span></code> が発生します：</p>
<div class="highlight-html+django notranslate"><div class="highlight"><pre><span></span><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>

<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>
</pre></div>
</div>
<p>フィルタの引数に予約済みのシーケンスを使用すると、同じ問題が発生することがあります：</p>
<div class="highlight-html+django notranslate"><div class="highlight"><pre><span></span><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>
</pre></div>
</div>
<p>これらのシーケンスで文字列を使用する必要がある場合は、テンプレート変数に格納するか、カスタムテンプレートタグまたはフィルタを使用して制限を回避してください。</p>
</section>
</section>
<section id="s-playing-with-context-objects">
<span id="s-playing-with-context"></span><span id="playing-with-context-objects"></span><span id="playing-with-context"></span><h2><code class="docutils literal notranslate"><span class="pre">Context</span></code> オブジェクトを使って遊ぶ<a class="headerlink" href="#playing-with-context-objects" title="Link to this heading">¶</a></h2>
<p>たいていの場合、<code class="docutils literal notranslate"><span class="pre">Context()</span></code> に辞書を渡して <a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> オブジェクトをインスタンス化します。しかし、一度インスタンス化された <code class="docutils literal notranslate"><span class="pre">Context</span></code> オブジェクトに対しても、標準的な辞書構文を使ってアイテムの追加や削除を行うことができます：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">Context</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;bar&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">del</span> <span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">KeyError</span>: <span class="n">&#39;foo&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;newvariable&quot;</span><span class="p">]</span>
<span class="go">&#39;hello&#39;</span>
</pre></div>
</div>
<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.get">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">get</span></span>(<em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">otherwise</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>)<a class="headerlink" href="#django.template.Context.get" title="Link to this definition">¶</a></dt>
<dd><p>もし <code class="docutils literal notranslate"><span class="pre">key</span></code> がコンテキストに存在すれば <code class="docutils literal notranslate"><span class="pre">key</span></code> の値を返し、そうでなければ <code class="docutils literal notranslate"><span class="pre">otherwise</span></code> を返します。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.setdefault">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">setdefault</span></span>(<em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>)<a class="headerlink" href="#django.template.Context.setdefault" title="Link to this definition">¶</a></dt>
<dd><p>もし <code class="docutils literal notranslate"><span class="pre">key</span></code> がコンテキスト内にあれば、その値を返します。そうでない場合は、 <code class="docutils literal notranslate"><span class="pre">default</span></code> の値を持つ <code class="docutils literal notranslate"><span class="pre">key</span></code> を挿入し、 <code class="docutils literal notranslate"><span class="pre">default</span></code> を返します。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.pop">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">pop</span></span>()<a class="headerlink" href="#django.template.Context.pop" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.push">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">push</span></span>()<a class="headerlink" href="#django.template.Context.push" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<dl class="py exception">
<dt class="sig sig-object py" id="django.template.ContextPopException">
<em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">ContextPopException</span></span><a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context.py#L8"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.ContextPopException" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>コンテキストオブジェクトはスタックです。つまり、 <code class="docutils literal notranslate"><span class="pre">push()</span></code> したり <code class="docutils literal notranslate"><span class="pre">pop()</span></code> したりすることができます。 <code class="docutils literal notranslate"><span class="pre">pop()</span></code> しすぎると <code class="docutils literal notranslate"><span class="pre">django.template.ContextPopException</span></code> が発生します：</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">push</span><span class="p">()</span>
<span class="go">{}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;second level&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="go">{&#39;foo&#39;: &#39;second level&#39;}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;first level&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;overwritten&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">ContextPopException</span>
</pre></div>
</div>
<p>また、コンテキストマネージャとして <code class="docutils literal notranslate"><span class="pre">push()</span></code> を使うことで、それに対応する <code class="docutils literal notranslate"><span class="pre">pop()</span></code> が呼び出されるようにすることもできます。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">c</span><span class="o">.</span><span class="n">push</span><span class="p">():</span>
<span class="gp">... </span>    <span class="n">c</span><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>
<span class="gp">... </span>    <span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="gp">...</span>
<span class="go">&#39;second level&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;first level&#39;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">push()</span></code> に渡されたすべての引数は、新しいコンテキストレベルを構築するために使用される <code class="docutils literal notranslate"><span class="pre">dict</span></code> コンストラクタに渡されます。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">c</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">foo</span><span class="o">=</span><span class="s2">&quot;second level&quot;</span><span class="p">):</span>
<span class="gp">... </span>    <span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="gp">...</span>
<span class="go">&#39;second level&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;first level&#39;</span>
</pre></div>
</div>
<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.update">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">update</span></span>(<em class="sig-param"><span class="n"><span class="pre">other_dict</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context.py#L170"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.Context.update" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p><code class="docutils literal notranslate"><span class="pre">push()</span></code> と <code class="docutils literal notranslate"><span class="pre">pop()</span></code> に加えて、 <code class="docutils literal notranslate"><span class="pre">Context</span></code> オブジェクトは <code class="docutils literal notranslate"><span class="pre">update()</span></code> メソッドも定義しています。これは <code class="docutils literal notranslate"><span class="pre">push()</span></code> と同じように動作しますが、辞書を引数として受け取り、空の辞書の代わりにその辞書をスタックにプッシュします。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">update</span><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>
<span class="go">{&#39;foo&#39;: &#39;updated&#39;}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;updated&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="go">{&#39;foo&#39;: &#39;updated&#39;}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;first level&#39;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">push()</span></code> と同様に、コンテキストマネージャとして <code class="docutils literal notranslate"><span class="pre">update()</span></code> を使うことで、それに対応する <code class="docutils literal notranslate"><span class="pre">pop()</span></code> が呼び出されるようにすることができます。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">c</span><span class="o">.</span><span class="n">update</span><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>
<span class="gp">... </span>    <span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="gp">...</span>
<span class="go">&#39;second level&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">]</span>
<span class="go">&#39;first level&#39;</span>
</pre></div>
</div>
<p>スタックとして <code class="docutils literal notranslate"><span class="pre">Context</span></code> を使うと、 <a class="reference internal" href="../../howto/custom-template-tags.html#howto-writing-custom-template-tags"><span class="std std-ref">いくつかのテンプレートタグ</span></a> で便利です。</p>
<dl class="py method">
<dt class="sig sig-object py" id="django.template.Context.flatten">
<span class="sig-prename descclassname"><span class="pre">Context.</span></span><span class="sig-name descname"><span class="pre">flatten</span></span>()<a class="headerlink" href="#django.template.Context.flatten" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p><code class="docutils literal notranslate"><span class="pre">flatten()</span></code> メソッドを使うと、組み込み変数を含む <code class="docutils literal notranslate"><span class="pre">Context</span></code> スタック全体を一つの辞書として取得できます。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">update</span><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="go">{&#39;bar&#39;: &#39;second level&#39;}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<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>
</pre></div>
</div>
<p>内部的には <code class="docutils literal notranslate"><span class="pre">flatten()</span></code> メソッドは <code class="docutils literal notranslate"><span class="pre">Context</span></code> オブジェクトを比較できるようにするためにも使われています。</p>
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c1</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c1</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c1</span><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>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c2</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c2</span><span class="o">.</span><span class="n">update</span><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>
<span class="go">{&#39;foo&#39;: &#39;first level&#39;, &#39;bar&#39;: &#39;second level&#39;}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c1</span> <span class="o">==</span> <span class="n">c2</span>
<span class="go">True</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">flatten()</span></code> の結果は、ユニットテストで <code class="docutils literal notranslate"><span class="pre">Context</span></code> と <code class="docutils literal notranslate"><span class="pre">dict</span></code> を比較するのに便利です：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">ContextTest</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
    <span class="k">def</span><span class="w"> </span><span class="nf">test_against_dictionary</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">c1</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
        <span class="n">c1</span><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>
        <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
            <span class="n">c1</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span>
            <span class="p">{</span>
                <span class="s2">&quot;True&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
                <span class="s2">&quot;None&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
                <span class="s2">&quot;False&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
                <span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="s2">&quot;value&quot;</span><span class="p">,</span>
            <span class="p">},</span>
        <span class="p">)</span>
</pre></div>
</div>
<section id="s-using-requestcontext">
<span id="s-subclassing-context-requestcontext"></span><span id="using-requestcontext"></span><span id="subclassing-context-requestcontext"></span><h3><code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> を使う<a class="headerlink" href="#using-requestcontext" title="Link to this heading">¶</a></h3>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.RequestContext">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">RequestContext</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">processors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_l10n</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_tz</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">autoescape</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context.py#L224"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.RequestContext" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>Django には特別な <a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> クラスである <code class="docutils literal notranslate"><span class="pre">django.template.RequestContext</span></code> があり、通常の <code class="docutils literal notranslate"><span class="pre">django.template.Context</span></code> とは少し異なります。最初の違いは、 <a class="reference internal" href="../request-response.html#django.http.HttpRequest" title="django.http.HttpRequest"><code class="xref py py-class docutils literal notranslate"><span class="pre">HttpRequest</span></code></a> を最初の引数として取ることです。たとえば次のようになります。</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">c</span> <span class="o">=</span> <span class="n">RequestContext</span><span class="p">(</span>
    <span class="n">request</span><span class="p">,</span>
    <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>
    <span class="p">},</span>
<span class="p">)</span>
</pre></div>
</div>
<p>2 つめの違いは、エンジンの <code class="docutils literal notranslate"><span class="pre">context_processors</span></code> 設定オプションによって、昆的に自動的にいくつかの変数をセットすることです。</p>
<p><code class="docutils literal notranslate"><span class="pre">context_processors</span></code> オプションは callable -- <strong>context processors</strong> と呼ばれます -- のリストで、引数としてリクエストオブジェクトを受け取り、コンテキストに統合する項目のディクショナリを返します。 デフォルトで生成される設定ファイルでは、テンプレートエンジンは以下のコンテキストプロセッサを含んでいます:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span>
    <span class="s2">&quot;django.template.context_processors.request&quot;</span><span class="p">,</span>
    <span class="s2">&quot;django.contrib.auth.context_processors.auth&quot;</span><span class="p">,</span>
    <span class="s2">&quot;django.contrib.messages.context_processors.messages&quot;</span><span class="p">,</span>
<span class="p">]</span>
</pre></div>
</div>
<p>In addition to these, <a class="reference internal" href="#django.template.RequestContext" title="django.template.RequestContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">RequestContext</span></code></a> always enables
<code class="docutils literal notranslate"><span class="pre">'django.template.context_processors.csrf'</span></code>. This is a security related
context processor required by the admin and other contrib apps, and, in case
of accidental misconfiguration, it is deliberately hardcoded in and cannot be
turned off in the <code class="docutils literal notranslate"><span class="pre">context_processors</span></code> option.</p>
<p>各プロセッサは順番通りに適用されます。したがって、1 番目と 2 番目のプロセッサがそれぞれ同じ名前の変数をコンテキストに追加したとき、2 番目の変数が 1 番目をオーバーライドします。デフォルトのプロセッサは以下で説明します。</p>
<div class="admonition-when-context-processors-are-applied admonition">
<p class="admonition-title">コンテキストプロセッサが適用されたとき</p>
<p>コンテキストプロセッサは、コンテキストデータのトップに適用されます。これは、<a class="reference internal" href="#django.template.Context" title="django.template.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> や <a class="reference internal" href="#django.template.RequestContext" title="django.template.RequestContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">RequestContext</span></code></a> に与えた変数を、コンテキストプロセッサが上書きすることを意味します。コンテキストプロセッサによって提供される変数と、名前が重複しないように気をつけてください。</p>
<p>コンテキストデータをコンテキストプロセッサに優先させたい場合、以下のパターンを使ってください:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">RequestContext</span>

<span class="n">request_context</span> <span class="o">=</span> <span class="n">RequestContext</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">request_context</span><span class="o">.</span><span class="n">push</span><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>
</pre></div>
</div>
<p>Django はこれを使って、<a class="reference internal" href="../../topics/http/shortcuts.html#django.shortcuts.render" title="django.shortcuts.render"><code class="xref py py-func docutils literal notranslate"><span class="pre">render()</span></code></a> や <a class="reference internal" href="../template-response.html#django.template.response.TemplateResponse" title="django.template.response.TemplateResponse"><code class="xref py py-class docutils literal notranslate"><span class="pre">TemplateResponse</span></code></a> といった API で、コンテキストデータがコンテキストプロセッサをオーバーライドできるようにします。</p>
</div>
<p>また、省略可能な第 3 引数 <code class="docutils literal notranslate"><span class="pre">processors</span></code> を使って、<a class="reference internal" href="#django.template.RequestContext" title="django.template.RequestContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">RequestContext</span></code></a> に追加的なプロセッサを渡すこともできます。以下の例では、<a class="reference internal" href="#django.template.RequestContext" title="django.template.RequestContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">RequestContext</span></code></a> のインスタンスは <code class="docutils literal notranslate"><span class="pre">ip_address</span></code> 変数を格納します:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">django.http</span><span class="w"> </span><span class="kn">import</span> <span class="n">HttpResponse</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">django.template</span><span class="w"> </span><span class="kn">import</span> <span class="n">RequestContext</span><span class="p">,</span> <span class="n">Template</span>


<span class="k">def</span><span class="w"> </span><span class="nf">ip_address_processor</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
    <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;ip_address&quot;</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s2">&quot;REMOTE_ADDR&quot;</span><span class="p">]}</span>


<span class="k">def</span><span class="w"> </span><span class="nf">client_ip_view</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
    <span class="n">template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;{{ title }}: {{ ip_address }}&quot;</span><span class="p">)</span>
    <span class="n">context</span> <span class="o">=</span> <span class="n">RequestContext</span><span class="p">(</span>
        <span class="n">request</span><span class="p">,</span>
        <span class="p">{</span>
            <span class="s2">&quot;title&quot;</span><span class="p">:</span> <span class="s2">&quot;Your IP Address&quot;</span><span class="p">,</span>
        <span class="p">},</span>
        <span class="p">[</span><span class="n">ip_address_processor</span><span class="p">],</span>
    <span class="p">)</span>
    <span class="k">return</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="s-built-in-template-context-processors">
<span id="s-context-processors"></span><span id="built-in-template-context-processors"></span><span id="context-processors"></span><h3>ビルトインのテンプレートコンテキストプロセッサ<a class="headerlink" href="#built-in-template-context-processors" title="Link to this heading">¶</a></h3>
<p>以下は、それぞれのビルトインのプロセッサが行うことです:</p>
<section id="s-django-contrib-auth-context-processors-auth">
<span id="django-contrib-auth-context-processors-auth"></span><h4><code class="docutils literal notranslate"><span class="pre">django.contrib.auth.context_processors.auth</span></code><a class="headerlink" href="#django-contrib-auth-context-processors-auth" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.contrib.auth.context_processors.auth">
<span class="sig-name descname"><span class="pre">auth</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/contrib/auth/context_processors.py#L49"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.contrib.auth.context_processors.auth" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は以下の変数を含みます:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">user</span></code> -- <code class="docutils literal notranslate"><span class="pre">auth.User</span></code> のインスタンスで、現在ログイン中のユーザ (あるいはログインしていない場合は <code class="docutils literal notranslate"><span class="pre">AnonymousUser</span></code> のインスタンス) を表します。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">perms</span></code> -- <code class="docutils literal notranslate"><span class="pre">django.contrib.auth.context_processors.PermWrapper</span></code> のインスタンスで、現在ログイン中のユーザが有するパーミッションを表します。</p></li>
</ul>
</section>
<section id="s-django-template-context-processors-debug">
<span id="django-template-context-processors-debug"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.debug</span></code><a class="headerlink" href="#django-template-context-processors-debug" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.template.context_processors.debug">
<span class="sig-name descname"><span class="pre">debug</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context_processors.py#L37"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.context_processors.debug" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は以下の 2 つの変数を含みます -- ただし、 <a class="reference internal" href="../settings.html#std-setting-DEBUG"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DEBUG</span></code></a> 設定が <code class="docutils literal notranslate"><span class="pre">True</span></code> でリクエストの IP アドレス (<code class="docutils literal notranslate"><span class="pre">request.META['REMOTE_ADDR']</span></code>) が <a class="reference internal" href="../settings.html#std-setting-INTERNAL_IPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INTERNAL_IPS</span></code></a> 設定内にある場合のみです:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">debug</span></code> -- <code class="docutils literal notranslate"><span class="pre">True</span></code> です。<a class="reference internal" href="../settings.html#std-setting-DEBUG"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DEBUG</span></code></a> モードかどうかをテストするためにテンプレート内で使うことができます。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sql_queries</span></code> -- <code class="docutils literal notranslate"><span class="pre">{'sql':</span> <span class="pre">...,</span> <span class="pre">'time':</span> <span class="pre">...}</span></code> ディクショナリのリストで、リクエスト中に発生した全ての SQL クエリとかかった時間を表します。リストはデータベースエイリアス順、クエリ順です。アクセス上でレイジーに生成されます。</p></li>
</ul>
</section>
<section id="s-django-template-context-processors-i18n">
<span id="django-template-context-processors-i18n"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.i18n</span></code><a class="headerlink" href="#django-template-context-processors-i18n" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.template.context_processors.i18n">
<span class="sig-name descname"><span class="pre">i18n</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context_processors.py#L59"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.context_processors.i18n" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は以下の変数を含みます:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">LANGUAGES</span></code> -- <a class="reference internal" href="../settings.html#std-setting-LANGUAGES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">LANGUAGES</span></code></a> 設定の値です。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">LANGUAGE_BIDI</span></code> -- 現在の言語がヘブライ語やアラビア語などの右から左へ書く言語の場合、 <code class="docutils literal notranslate"><span class="pre">True</span></code> を返します。英語、フランス語、ドイツ語などの左から右へ書く言語の場合は <code class="docutils literal notranslate"><span class="pre">False</span></code> です。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">LANGUAGE_CODE</span></code> -- 存在する場合は <code class="docutils literal notranslate"><span class="pre">request.LANGUAGE_CODE</span></code> で、それ以外の場合は <a class="reference internal" href="../settings.html#std-setting-LANGUAGE_CODE"><code class="xref std std-setting docutils literal notranslate"><span class="pre">LANGUAGE_CODE</span></code></a> 設定です。</p></li>
</ul>
<p>同じ値を生成するテンプレートタグについては <a class="reference internal" href="../../topics/i18n/translation.html#i18n-template-tags"><span class="std std-ref">i18n テンプレートタグ</span></a> を参照してください。</p>
</section>
<section id="s-django-template-context-processors-media">
<span id="django-template-context-processors-media"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.media</span></code><a class="headerlink" href="#django-template-context-processors-media" title="Link to this heading">¶</a></h4>
<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は変数 <code class="docutils literal notranslate"><span class="pre">MEDIA_URL</span></code> を含みます。これは、 <a class="reference internal" href="../settings.html#std-setting-MEDIA_URL"><code class="xref std std-setting docutils literal notranslate"><span class="pre">MEDIA_URL</span></code></a> 設定の値を提供します。</p>
</section>
<section id="s-django-template-context-processors-static">
<span id="django-template-context-processors-static"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.static</span></code><a class="headerlink" href="#django-template-context-processors-static" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.template.context_processors.static">
<span class="sig-name descname"><span class="pre">static</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context_processors.py#L75"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.context_processors.static" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は変数 <code class="docutils literal notranslate"><span class="pre">STATIC_URL</span></code> を含みます。これは、<a class="reference internal" href="../settings.html#std-setting-STATIC_URL"><code class="xref std std-setting docutils literal notranslate"><span class="pre">STATIC_URL</span></code></a> 設定の値を提供します。</p>
</section>
<section id="s-django-template-context-processors-csrf">
<span id="django-template-context-processors-csrf"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.csrf</span></code><a class="headerlink" href="#django-template-context-processors-csrf" title="Link to this heading">¶</a></h4>
<p>このプロセッサは、 <a class="reference internal" href="../csrf.html"><span class="doc">クロスサイトリクエストフォージェリ (CSRF)</span></a> 対策のための <a class="reference internal" href="builtins.html#std-templatetag-csrf_token"><code class="xref std std-ttag docutils literal notranslate"><span class="pre">csrf_token</span></code></a> テンプレートタグが必要とするトークンを追加します。</p>
</section>
<section id="s-django-template-context-processors-csp">
<span id="django-template-context-processors-csp"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.csp</span></code><a class="headerlink" href="#django-template-context-processors-csp" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.template.context_processors.csp">
<span class="sig-name descname"><span class="pre">csp</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context_processors.py#L93"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.context_processors.csp" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<div class="versionadded">
<span class="title">New in Django 6.0.</span> </div>
<p>If this processor is enabled, every <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> will contain a variable
<code class="docutils literal notranslate"><span class="pre">csp_nonce</span></code>, providing a securely generated, request-specific nonce suitable
for use under a Content Security Policy. See <a class="reference internal" href="../csp.html#csp-nonce"><span class="std std-ref">CSP nonce usage</span></a>
for details.</p>
</section>
<section id="s-django-template-context-processors-request">
<span id="django-template-context-processors-request"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.request</span></code><a class="headerlink" href="#django-template-context-processors-request" title="Link to this heading">¶</a></h4>
<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は変数``request`` を含みます。これは現在の <a class="reference internal" href="../request-response.html#django.http.HttpRequest" title="django.http.HttpRequest"><code class="xref py py-class docutils literal notranslate"><span class="pre">HttpRequest</span></code></a> です。</p>
</section>
<section id="s-django-template-context-processors-tz">
<span id="django-template-context-processors-tz"></span><h4><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.tz</span></code><a class="headerlink" href="#django-template-context-processors-tz" title="Link to this heading">¶</a></h4>
<dl class="py function">
<dt class="sig sig-object py" id="django.template.context_processors.tz">
<span class="sig-name descname"><span class="pre">tz</span></span>(<em class="sig-param"><span class="n"><span class="pre">request</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/context_processors.py#L69"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.context_processors.tz" title="Link to this definition">¶</a></dt>
<dd></dd></dl>

<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は変数 <code class="docutils literal notranslate"><span class="pre">TIME_ZONE</span></code> を含みます。これは、現在アクティブなタイムゾーンの名前を提供します。</p>
</section>
<section id="s-django-contrib-messages-context-processors-messages">
<span id="django-contrib-messages-context-processors-messages"></span><h4><code class="docutils literal notranslate"><span class="pre">django.contrib.messages.context_processors.messages</span></code><a class="headerlink" href="#django-contrib-messages-context-processors-messages" title="Link to this heading">¶</a></h4>
<p>このプロセッサが有効な場合、全ての <code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> は以下の 2 つの変数を含みます:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">messages</span></code> -- <a class="reference internal" href="../contrib/messages.html"><span class="doc">メッセージフレームワーク</span></a> を通じてセットされた、(文字列としての) メッセージのリストです。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">DEFAULT_MESSAGE_LEVELS</span></code> -- <a class="reference internal" href="../contrib/messages.html#message-level-constants"><span class="std std-ref">数値</span></a> のメッセージレベル名のマッピングです。</p></li>
</ul>
</section>
</section>
<section id="s-writing-your-own-context-processors">
<span id="writing-your-own-context-processors"></span><h3>独自のコンテキストプロセッサを記述する<a class="headerlink" href="#writing-your-own-context-processors" title="Link to this heading">¶</a></h3>
<p>コンテキストプロセッサはシンプルなインタフェースを持っています。これは Python の関数で、 <a class="reference internal" href="../request-response.html#django.http.HttpRequest" title="django.http.HttpRequest"><code class="xref py py-class docutils literal notranslate"><span class="pre">HttpRequest</span></code></a> オブジェクトを引数に取り、テンプレートコンテキストに追加される辞書を返します。</p>
<p>たとえば、すべてのコンテキストに <a class="reference internal" href="../settings.html#std-setting-DEFAULT_FROM_EMAIL"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DEFAULT_FROM_EMAIL</span></code></a> 設定を追加するには以下のようにします：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">django.conf</span><span class="w"> </span><span class="kn">import</span> <span class="n">settings</span>


<span class="k">def</span><span class="w"> </span><span class="nf">from_email</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
    <span class="k">return</span> <span class="p">{</span>
        <span class="s2">&quot;DEFAULT_FROM_EMAIL&quot;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_FROM_EMAIL</span><span class="p">,</span>
    <span class="p">}</span>
</pre></div>
</div>
<p>カスタムコンテキストプロセッサはコードベースのどこにあっても構いません。Django が気にするのは、カスタムコンテキストプロセッサが <a class="reference internal" href="../settings.html#std-setting-TEMPLATES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">TEMPLATES</span></code></a> 設定の <code class="docutils literal notranslate"><span class="pre">'context_processors'</span></code> オプションで指されているかどうか、直接使っている場合は <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> の <code class="docutils literal notranslate"><span class="pre">context_processors</span></code> 引数で指されているかどうかだけです。</p>
</section>
</section>
<section id="s-loading-templates">
<span id="loading-templates"></span><h2>テンプレートを読み込む<a class="headerlink" href="#loading-templates" title="Link to this heading">¶</a></h2>
<p>通常、テンプレートは低レベルの <a class="reference internal" href="#django.template.Template" title="django.template.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">Template</span></code></a> API を使うのではなく、ファイルシステム上のファイルに保存します。テンプレートは <strong>テンプレートディレクトリ</strong> として指定したディレクトリに保存します。</p>
<p>Django はテンプレート読み込みの設定によって、様々な場所でテンプレートディレクトリを探しますが (後述の 「ローダの種類」を参照してください)、テンプレートディレクトリを指定する最も基本的な方法は <a class="reference internal" href="../settings.html#std-setting-TEMPLATES-DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code></a> オプションを使うことです。</p>
<section id="s-the-dirs-option">
<span id="the-dirs-option"></span><h3><a class="reference internal" href="../settings.html#std-setting-TEMPLATES-DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code></a> オプション<a class="headerlink" href="#the-dirs-option" title="Link to this heading">¶</a></h3>
<p>設定ファイルの <a class="reference internal" href="../settings.html#std-setting-TEMPLATES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">TEMPLATES</span></code></a> 設定にある <a class="reference internal" href="../settings.html#std-setting-TEMPLATES-DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code></a> オプション、または <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> の <code class="docutils literal notranslate"><span class="pre">dirs</span></code> 引数を使って、テンプレートディレクトリを Django に教えてください。これはテンプレートディレクトリへのフルパスを含む文字列のリストに設定する必要があります：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;DIRS&quot;</span><span class="p">:</span> <span class="p">[</span>
            <span class="s2">&quot;/home/html/templates/lawrence.com&quot;</span><span class="p">,</span>
            <span class="s2">&quot;/home/html/templates/default&quot;</span><span class="p">,</span>
        <span class="p">],</span>
    <span class="p">},</span>
<span class="p">]</span>
</pre></div>
</div>
<p>ディレクトリとテンプレートがWebサーバーによって読み取れる限り、テンプレートはどこに置いても構いません。テンプレートの拡張子は <code class="docutils literal notranslate"><span class="pre">.html</span></code> や <code class="docutils literal notranslate"><span class="pre">.txt</span></code> など好きなものを使うことができます。</p>
<p>これらのパスは、Windows でも Unix スタイルのスラッシュ (/) を使う必要があります。</p>
</section>
<section id="s-loader-types">
<span id="s-template-loaders"></span><span id="loader-types"></span><span id="template-loaders"></span><h3>ローダーの種類<a class="headerlink" href="#loader-types" title="Link to this heading">¶</a></h3>
<p>デフォルトでは、 Django はファイルシステムベースのテンプレートローダーを使いますが、 Django には、他のソースからテンプレートを読み込むことができる、他のテンプレートローダーがいくつか付属しています。</p>
<p>これらのローダーのいくつかはデフォルトでは無効になっていますが、 <code class="docutils literal notranslate"><span class="pre">DjangoTemplates</span></code> バックエンドの <a class="reference internal" href="../settings.html#std-setting-TEMPLATES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">TEMPLATES</span></code></a> 設定に <code class="docutils literal notranslate"><span class="pre">'loaders'</span></code> オプションを追加するか、 <a class="reference internal" href="#django.template.Engine" title="django.template.Engine"><code class="xref py py-class docutils literal notranslate"><span class="pre">Engine</span></code></a> に <code class="docutils literal notranslate"><span class="pre">loaders</span></code> 引数を渡すことで有効にできます。 <code class="docutils literal notranslate"><span class="pre">loaders</span></code> は文字列かタプルのリストで、それぞれがテンプレートローダークラスを表します。以下は Django に付属のテンプレートローダーです：</p>
<p><code class="docutils literal notranslate"><span class="pre">django.template.loaders.filesystem.Loader</span></code></p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.loaders.filesystem.Loader">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">filesystem.</span></span><span class="sig-name descname"><span class="pre">Loader</span></span><a class="headerlink" href="#django.template.loaders.filesystem.Loader" title="Link to this definition">¶</a></dt>
<dd><p><a class="reference internal" href="../settings.html#std-setting-TEMPLATES-DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code></a> に従ってファイルシステムからテンプレートを読み込みます。</p>
<p>このローダーはデフォルトで有効になっています。しかし、 <a class="reference internal" href="../settings.html#std-setting-TEMPLATES-DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code></a> を空でないリストに設定しないとテンプレートを見つけられません：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;DIRS&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s2">&quot;templates&quot;</span><span class="p">],</span>
    <span class="p">}</span>
<span class="p">]</span>
</pre></div>
</div>
<p>また、<code class="docutils literal notranslate"><span class="pre">'DIRS'</span></code> をオーバーライドして、特定のファイルシステムローダーに特定のディレクトリを指定することもできます：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span>
            <span class="s2">&quot;loaders&quot;</span><span class="p">:</span> <span class="p">[</span>
                <span class="p">(</span>
                    <span class="s2">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class="p">,</span>
                    <span class="p">[</span><span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s2">&quot;templates&quot;</span><span class="p">],</span>
                <span class="p">),</span>
            <span class="p">],</span>
        <span class="p">},</span>
    <span class="p">}</span>
<span class="p">]</span>
</pre></div>
</div>
</dd></dl>

<p><code class="docutils literal notranslate"><span class="pre">django.template.loaders.app_directories.Loader</span></code></p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.loaders.app_directories.Loader">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">app_directories.</span></span><span class="sig-name descname"><span class="pre">Loader</span></span><a class="headerlink" href="#django.template.loaders.app_directories.Loader" title="Link to this definition">¶</a></dt>
<dd><p>ファイルシステム上の Django アプリからテンプレートを読み込みます。 <a class="reference internal" href="../settings.html#std-setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a> にあるアプリごとに、ローダーは <code class="docutils literal notranslate"><span class="pre">templates</span></code> サブディレクトリを探します。そのディレクトリが存在すれば、 Django はその中にあるテンプレートを探します。</p>
<p>つまり、テンプレートを個々のアプリと一緒に保存できます。 また、Django アプリをデフォルトのテンプレートと一緒に配布するのにも役立ちます。</p>
<p>たとえば、この設定の場合：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">INSTALLED_APPS</span> <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>
</pre></div>
</div>
<p>...上記のようにすると、<code class="docutils literal notranslate"><span class="pre">get_template('foo.html')</span></code> はこれらのディレクトリの <code class="docutils literal notranslate"><span class="pre">foo.html</span></code> をこの順番で探します：</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">/path/to/myproject/polls/templates/</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">/path/to/myproject/music/templates/</span></code></p></li>
</ul>
<p>...そして最初に見つけたものを使います。</p>
<p><a class="reference internal" href="../settings.html#std-setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a> の順序は重要です！例えば、Django管理サイトをカスタマイズしたい場合、<code class="docutils literal notranslate"><span class="pre">django.contrib.admin</span></code> の標準テンプレート <code class="docutils literal notranslate"><span class="pre">admin/base_site.html</span></code> を、<code class="docutils literal notranslate"><span class="pre">myproject.polls</span></code> 内の独自の <code class="docutils literal notranslate"><span class="pre">admin/base_site.html</span></code> で上書きしたいかもしれません。その場合、<code class="docutils literal notranslate"><span class="pre">myproject.polls</span></code> が <a class="reference internal" href="../settings.html#std-setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a> で <code class="docutils literal notranslate"><span class="pre">django.contrib.admin</span></code> よりも <em>前に</em> 来るように確認する必要があります。そうしないと、<code class="docutils literal notranslate"><span class="pre">django.contrib.admin</span></code> のものが先にロードされ、あなたのものは無視されます。</p>
<p>ローダーは最初に実行されるときに最適化を行うことに注意してください。それは、どの <a class="reference internal" href="../settings.html#std-setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a> パッケージが <code class="docutils literal notranslate"><span class="pre">templates</span></code> サブディレクトリを持っているかのリストをキャッシュします。</p>
<p>このローダーを有効にするには <a class="reference internal" href="../settings.html#std-setting-TEMPLATES-APP_DIRS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">APP_DIRS</span></code></a> を <code class="docutils literal notranslate"><span class="pre">True</span></code>: に設定します：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;APP_DIRS&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
    <span class="p">}</span>
<span class="p">]</span>
</pre></div>
</div>
</dd></dl>

<p><code class="docutils literal notranslate"><span class="pre">django.template.loaders.cached.Loader</span></code></p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.loaders.cached.Loader">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">cached.</span></span><span class="sig-name descname"><span class="pre">Loader</span></span><a class="headerlink" href="#django.template.loaders.cached.Loader" title="Link to this definition">¶</a></dt>
<dd><p>Django のテンプレートシステムは非常に高速ですが、テンプレートがレンダリングされるたびにテンプレートを読み込んでコンパイルする必要がある場合、そのオーバヘッドは増大する可能性があります。</p>
<p>キャッシュされたテンプレートローダーは、それがラップすべき他のローダーのリストで構成されます。ラップされたローダーは、初めて遭遇した未知のテンプレートを見つけるために使用されます。その後、キャッシュされたローダーはコンパイルされた <code class="docutils literal notranslate"><span class="pre">Template</span></code> をメモリに保存します。同じテンプレートをロードするための後続のリクエストには、キャッシュされた <code class="docutils literal notranslate"><span class="pre">Template</span></code> インスタンスが返されます。</p>
<p>このローダーは <a class="reference internal" href="../settings.html#std-setting-TEMPLATES-OPTIONS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">OPTIONS['loaders']</span></code></a> が指定されていない場合に自動的に有効になります。</p>
<p>カスタムテンプレートローダーでは、以下のような設定を使ってテンプレートのキャッシュを手動で指定できます：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;DIRS&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s2">&quot;templates&quot;</span><span class="p">],</span>
        <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span>
            <span class="s2">&quot;loaders&quot;</span><span class="p">:</span> <span class="p">[</span>
                <span class="p">(</span>
                    <span class="s2">&quot;django.template.loaders.cached.Loader&quot;</span><span class="p">,</span>
                    <span class="p">[</span>
                        <span class="s2">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class="p">,</span>
                        <span class="s2">&quot;django.template.loaders.app_directories.Loader&quot;</span><span class="p">,</span>
                        <span class="s2">&quot;path.to.custom.Loader&quot;</span><span class="p">,</span>
                    <span class="p">],</span>
                <span class="p">),</span>
            <span class="p">],</span>
        <span class="p">},</span>
    <span class="p">}</span>
<span class="p">]</span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">注釈</p>
<p>Django 組み込みのテンプレートタグはすべてキャッシュローダで安全に使えますが、サードパーティのパッケージや自分で書いたカスタムテンプレートタグを使う場合は、各タグの <code class="docutils literal notranslate"><span class="pre">Node</span></code> 実装がスレッドセーフであることを確認する必要があります。詳細は <a class="reference internal" href="../../howto/custom-template-tags.html#template-tag-thread-safety"><span class="std std-ref">テンプレートタグのスレッド安全性についての注意事項</span></a> を参照してください。</p>
</div>
</dd></dl>

<p><code class="docutils literal notranslate"><span class="pre">django.template.loaders.locmem.Loader</span></code></p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.loaders.locmem.Loader">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">locmem.</span></span><span class="sig-name descname"><span class="pre">Loader</span></span><a class="headerlink" href="#django.template.loaders.locmem.Loader" title="Link to this definition">¶</a></dt>
<dd><p>Python 辞書からテンプレートを読み込みます。これはテストに便利です。</p>
<p>このローダーはテンプレートの辞書を第一引数に取ります：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <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>
        <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span>
            <span class="s2">&quot;loaders&quot;</span><span class="p">:</span> <span class="p">[</span>
                <span class="p">(</span>
                    <span class="s2">&quot;django.template.loaders.locmem.Loader&quot;</span><span class="p">,</span>
                    <span class="p">{</span>
                        <span class="s2">&quot;index.html&quot;</span><span class="p">:</span> <span class="s2">&quot;content here&quot;</span><span class="p">,</span>
                    <span class="p">},</span>
                <span class="p">),</span>
            <span class="p">],</span>
        <span class="p">},</span>
    <span class="p">}</span>
<span class="p">]</span>
</pre></div>
</div>
<p>このローダーはデフォルトでは無効です。</p>
</dd></dl>

<p>Django は <code class="docutils literal notranslate"><span class="pre">'loaders'</span></code> オプションに従って、テンプレートローダーを順番に使用します。一致するローダーが見つかるまで、それぞれのローダーを使います。</p>
</section>
</section>
<section id="s-custom-loaders">
<span id="s-custom-template-loaders"></span><span id="custom-loaders"></span><span id="custom-template-loaders"></span><h2>カスタムローダー<a class="headerlink" href="#custom-loaders" title="Link to this heading">¶</a></h2>
<p>カスタムテンプレートローダーを使って、追加のソースからテンプレートをロードできます。カスタム <code class="docutils literal notranslate"><span class="pre">Loader</span></code> クラスは <code class="docutils literal notranslate"><span class="pre">django.template.loaders.base.Loader</span></code> を継承し、 <code class="docutils literal notranslate"><span class="pre">get_contents()</span></code> と <code class="docutils literal notranslate"><span class="pre">get_template_sources()</span></code> メソッドを定義する必要があります。</p>
<section id="s-loader-methods">
<span id="loader-methods"></span><h3>ローダーのメソッド<a class="headerlink" href="#loader-methods" title="Link to this heading">¶</a></h3>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.loaders.base.Loader">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Loader</span></span><a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/loaders/base.py#L4"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.loaders.base.Loader" title="Link to this definition">¶</a></dt>
<dd><p>ファイルシステムやデータベースなど、指定されたソースからテンプレートを読み込みます。</p>
<dl class="py method">
<dt class="sig sig-object py" id="django.template.loaders.base.Loader.get_template_sources">
<span class="sig-name descname"><span class="pre">get_template_sources</span></span>(<em class="sig-param"><span class="n"><span class="pre">template_name</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/loaders/base.py#L37"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.loaders.base.Loader.get_template_sources" title="Link to this definition">¶</a></dt>
<dd><p>テンプレート名 <code class="docutils literal notranslate"><span class="pre">template_name</span></code> を受け取り、 <a class="reference internal" href="#django.template.base.Origin" title="django.template.base.Origin"><code class="xref py py-class docutils literal notranslate"><span class="pre">Origin</span></code></a> インスタンスを生成するメソッドです。</p>
<p>For example, the filesystem loader may receive <code class="docutils literal notranslate"><span class="pre">'index.html'</span></code> as a
<code class="docutils literal notranslate"><span class="pre">template_name</span></code> argument. This method would yield origins for the
full path of <code class="docutils literal notranslate"><span class="pre">index.html</span></code> as it appears in each template directory
the loader looks at.</p>
<p>メソッドは与えられたパスにテンプレートが存在することを確認する必要はありませんが、パスが有効であることを確認する必要があります。例えば、ファイルシステムローダーはパスが有効なテンプレートディレクトリのもとにあることを確認します。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.loaders.base.Loader.get_contents">
<span class="sig-name descname"><span class="pre">get_contents</span></span>(<em class="sig-param"><span class="n"><span class="pre">origin</span></span></em>)<a class="headerlink" href="#django.template.loaders.base.Loader.get_contents" title="Link to this definition">¶</a></dt>
<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"><span class="pre">Origin</span></code></a> に対するテンプレートのコンテンツを返します。</p>
<p>これは、ファイルシステムローダーがファイルシステムから内容を読み取る場所、またはデータベースローダーがデータベースから読み取る場所です。一致するテンプレートが存在しない場合、これは <a class="reference internal" href="../../topics/templates.html#django.template.TemplateDoesNotExist" title="django.template.TemplateDoesNotExist"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TemplateDoesNotExist</span></code></a> エラーを発生させるべきです。</p>
</dd></dl>

<dl class="py method">
<dt class="sig sig-object py" id="django.template.loaders.base.Loader.get_template">
<span class="sig-name descname"><span class="pre">get_template</span></span>(<em class="sig-param"><span class="n"><span class="pre">template_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">skip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/loaders/base.py#L8"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.loaders.base.Loader.get_template" title="Link to this definition">¶</a></dt>
<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"><span class="pre">get_template_sources()</span></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"><span class="pre">get_contents()</span></code></a> を呼び出すことで、与えられた <code class="docutils literal notranslate"><span class="pre">template_name</span></code> に対応する <code class="docutils literal notranslate"><span class="pre">Template</span></code> オブジェクトを返します。これは最初にマッチしたテンプレートを返します。テンプレートが見つからない場合、 <a class="reference internal" href="../../topics/templates.html#django.template.TemplateDoesNotExist" title="django.template.TemplateDoesNotExist"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TemplateDoesNotExist</span></code></a> が発生します。</p>
<p>オプションの <code class="docutils literal notranslate"><span class="pre">skip</span></code> 引数はテンプレートを拡張するときに無視するオリジンのリストです。これにより、テンプレートが同じ名前の他のテンプレートを継承できるようになります。また、再帰エラーを回避するためにも使用されます。</p>
<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"><span class="pre">get_template_sources()</span></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"><span class="pre">get_contents()</span></code></a> を定義すれば十分です。 <code class="docutils literal notranslate"><span class="pre">get_template()</span></code> は通常オーバーライドする必要はありません。</p>
</dd></dl>

</dd></dl>

<div class="admonition-building-your-own admonition">
<p class="admonition-title">自作する場合</p>
<p>例については、 <a class="extlink-source reference external" href="https://github.com/django/django/blob/main/django/template/loaders">Django の組み込みローダーのソースコード</a> を読んでください。</p>
</div>
</section>
</section>
<section id="s-template-origin">
<span id="template-origin"></span><h2>テンプレート・オリジン<a class="headerlink" href="#template-origin" title="Link to this heading">¶</a></h2>
<p>テンプレートは読み込むソースに応じた属性を含む <code class="docutils literal notranslate"><span class="pre">origin</span></code> を持ちます。</p>
<dl class="py class">
<dt class="sig sig-object py" id="django.template.base.Origin">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Origin</span></span>(<em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">template_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>)<a class="reference external" href="https://github.com/django/django/blob/stable/6.0.x/django/template/base.py#L113"><span class="viewcode-link"><span class="pre">[ソース]</span></span></a><a class="headerlink" href="#django.template.base.Origin" title="Link to this definition">¶</a></dt>
<dd><dl class="py attribute">
<dt class="sig sig-object py" id="django.template.base.Origin.name">
<span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#django.template.base.Origin.name" title="Link to this definition">¶</a></dt>
<dd><p>テンプレートローダーが返すテンプレートへのパス。ファイルシステムから読み込むローダーの場合、これはテンプレートへのフルパスです。</p>
<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class="docutils literal notranslate"><span class="pre">&lt;unknown_source&gt;</span></code> という文字列値となります。</p>
</dd></dl>

<dl class="py attribute">
<dt class="sig sig-object py" id="django.template.base.Origin.template_name">
<span class="sig-name descname"><span class="pre">template_name</span></span><a class="headerlink" href="#django.template.base.Origin.template_name" title="Link to this definition">¶</a></dt>
<dd><p>テンプレートローダーに渡されるテンプレートへの相対パス。</p>
<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class="docutils literal notranslate"><span class="pre">None</span></code> です。</p>
</dd></dl>

<dl class="py attribute">
<dt class="sig sig-object py" id="django.template.base.Origin.loader">
<span class="sig-name descname"><span class="pre">loader</span></span><a class="headerlink" href="#django.template.base.Origin.loader" title="Link to this definition">¶</a></dt>
<dd><p>この <code class="docutils literal notranslate"><span class="pre">Origin</span></code> を構築したテンプレートローダーインスタンス。</p>
<p>テンプレートがテンプレートローダーを通してではなく、直接インスタンス化された場合、これは <code class="docutils literal notranslate"><span class="pre">None</span></code> です。</p>
<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"><span class="pre">django.template.loaders.cached.Loader</span></code></a> は、ラップされたローダー全てにこの属性を要求します。通常、 <code class="docutils literal notranslate"><span class="pre">Origin</span></code> を <code class="docutils literal notranslate"><span class="pre">loader=self</span></code> でインスタンス化します。</p>
</dd></dl>

</dd></dl>

</section>
</section>


          </div>
        </div>
      </div>
      
        
          <div class="yui-b" id="sidebar">
            
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
  <div>
    <h3><a href="../../contents.html">目次</a></h3>
    <ul>
<li><a class="reference internal" href="#">Python プログラマーのための Django テンプレート言語</a><ul>
<li><a class="reference internal" href="#overview">概要</a></li>
<li><a class="reference internal" href="#configuring-an-engine">エンジンを設定する</a></li>
<li><a class="reference internal" href="#loading-a-template">テンプレートを読み込む</a></li>
<li><a class="reference internal" href="#rendering-a-context">コンテキストをレンダリングする</a><ul>
<li><a class="reference internal" href="#variables-and-lookups">変数とルックアップ</a></li>
<li><a class="reference internal" href="#how-invalid-variables-are-handled">無効な変数の扱い</a></li>
<li><a class="reference internal" href="#built-in-variables">組み込み変数</a></li>
<li><a class="reference internal" href="#limitations-with-string-literals">文字列リテラルの制約</a></li>
</ul>
</li>
<li><a class="reference internal" href="#playing-with-context-objects"><code class="docutils literal notranslate"><span class="pre">Context</span></code> オブジェクトを使って遊ぶ</a><ul>
<li><a class="reference internal" href="#using-requestcontext"><code class="docutils literal notranslate"><span class="pre">RequestContext</span></code> を使う</a></li>
<li><a class="reference internal" href="#built-in-template-context-processors">ビルトインのテンプレートコンテキストプロセッサ</a><ul>
<li><a class="reference internal" href="#django-contrib-auth-context-processors-auth"><code class="docutils literal notranslate"><span class="pre">django.contrib.auth.context_processors.auth</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-debug"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.debug</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-i18n"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.i18n</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-media"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.media</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-static"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.static</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-csrf"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.csrf</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-csp"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.csp</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-request"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.request</span></code></a></li>
<li><a class="reference internal" href="#django-template-context-processors-tz"><code class="docutils literal notranslate"><span class="pre">django.template.context_processors.tz</span></code></a></li>
<li><a class="reference internal" href="#django-contrib-messages-context-processors-messages"><code class="docutils literal notranslate"><span class="pre">django.contrib.messages.context_processors.messages</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#writing-your-own-context-processors">独自のコンテキストプロセッサを記述する</a></li>
</ul>
</li>
<li><a class="reference internal" href="#loading-templates">テンプレートを読み込む</a><ul>
<li><a class="reference internal" href="#the-dirs-option"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DIRS</span></code> オプション</a></li>
<li><a class="reference internal" href="#loader-types">ローダーの種類</a></li>
</ul>
</li>
<li><a class="reference internal" href="#custom-loaders">カスタムローダー</a><ul>
<li><a class="reference internal" href="#loader-methods">ローダーのメソッド</a></li>
</ul>
</li>
<li><a class="reference internal" href="#template-origin">テンプレート・オリジン</a></li>
</ul>
</li>
</ul>

  </div>
  <div>
    <h4>前のトピックへ</h4>
    <p class="topless"><a href="builtins.html"
                          title="前の章へ">組み込みテンプレートタグとフィルタ</a></p>
  </div>
  <div>
    <h4>次のトピックへ</h4>
    <p class="topless"><a href="../template-response.html"
                          title="次の章へ"><code class="docutils literal notranslate"><span class="pre">TemplateResponse</span></code> および <code class="docutils literal notranslate"><span class="pre">SimpleTemplateResponse</span></code></a></p>
  </div>
  <div role="note" aria-label="source link">
    <h3>このページ</h3>
    <ul class="this-page-menu">
      <li><a href="../../_sources/ref/templates/api.txt"
            rel="nofollow">ソースコードを表示</a></li>
    </ul>
   </div>
<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">クイック検索</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="検索" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
        </div>
      </div>
              <h3>Last update:</h3>
              <p class="topless">12月 04, 2025</p>
          </div>
        
      
    </div>

    <div id="ft">
      <div class="nav">
    &laquo; <a href="builtins.html" title="組み込みテンプレートタグとフィルタ">previous</a>
     |
    <a href="../index.html" title="API リファレンス" accesskey="U">up</a>
   |
    <a href="../template-response.html" title="&lt;code class=&#34;docutils literal notranslate&#34;&gt;&lt;span class=&#34;pre&#34;&gt;TemplateResponse&lt;/span&gt;&lt;/code&gt; および &lt;code class=&#34;docutils literal notranslate&#34;&gt;&lt;span class=&#34;pre&#34;&gt;SimpleTemplateResponse&lt;/span&gt;&lt;/code&gt;">next</a> &raquo;</div>
    </div>
  </div>

      <div class="clearer"></div>
    </div>
  </body>
</html>