{"title":"The Django Template Language","version":"2.2","locale":"ja","docname":"ref/templates/language","url":"/ja/2.2/ref/templates/language/","canonical":"https://djangodocs.dev/ja/2.2/ref/templates/language/","summary":"このドキュメントはDjangoテンプレートシステムの文法を説明しています。もしあなたがもっと技術者的な観点でどう動かすかやどう拡張するかを知りたい場合は、 The Django template language: for Python programmers をご覧ください。 Django…","html":"<h1>The Django Template Language<a class=\"heading-anchor\" href=\"#the-django-template-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントはDjangoテンプレートシステムの文法を説明しています。もしあなたがもっと技術者的な観点でどう動かすかやどう拡張するかを知りたい場合は、<a class=\"reference internal\" href=\"/ja/2.2/ref/templates/api/\"><span class=\"doc\">The Django template language: for Python programmers</span></a> をご覧ください。</p>\n<p>Django のテンプレート言語は、パワーと使いやすさのバランスを取るように設計されています。HTMLでの作業に使用されるものが快適に感じられるように設計されているのです。あなたが他のテキストベースのテンプレート言語に対して <a class=\"reference external\" href=\"https://www.smarty.net/\">Smarty</a> や <a class=\"reference external\" href=\"http://jinja.pocoo.org/\">Jinja2</a> のような露出的な処理を習得しているのなら、Django テンプレートをより身近に感じられるはずです。</p>\n<aside class=\"admonition-philosophy admonition\">\n<p class=\"admonition-title\">設計思想</p>\n<p>あなたがどんなプログラミング経験を持ってるにしろ、HTMLの中にコードを埋め込む言語を使っていたにしろ、DjangoテンプレートシステムはただHTMLのなかにPythonを貼り付けるだけのシステムではないことを心に留めたいと思われたでしょう。これは&quot;テンプレートシステムは、プログラム論理構造を表すのでなく、あくまでプレゼンテーションを表現することを意味する。&quot;というデザイン設計から来ています。</p>\n<p>Django のテンプレートシステムは、いくつかのプログラミング構造 - ブールテスト用の <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a> タグ、ループ用の <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">for</span></code></a> タグなどと同様に機能するタグを提供しています。しかしこれらは、単純に対応する Python コードとしては実行するわけではなく、テンプレートシステムは、任意の Python の式を実行しません。タグ、フィルタ、および下の文法リストのみがデフォルトではサポートされています。(しかし、必要に応じて <a class=\"reference internal\" href=\"/ja/2.2/howto/custom-template-tags/\"><span class=\"doc\">あなた独自の拡張機能</span></a> をテンプレート言語に追加することも可能です。)</p>\n</aside>\n<section id=\"templates\">\n<h2>テンプレート<a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>テンプレートは、単純なテキストファイルです。これは、任意のテキストベースのフォーマット (HTML、XML、CSV) などを生成することができます。</p>\n<p>テンプレートに含まれるのは、テンプレートが読み込まれたとき実際の値で置き換えられる <strong>変数</strong> と、テンプレートのロジックを制御する <strong>タグ</strong> です。</p>\n<p>下は幾つかの基本を示している少ない見本です。各要素については、このドキュメントの後半で説明します。</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base_generic.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">section.title</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">section.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">story</span> <span class=\"k\">in</span> <span class=\"nv\">story_list</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">story.get_absolute_url</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">story.headline</span><span class=\"o\">|</span><span class=\"nf\">upper</span> <span class=\"cp\">}}</span>\n  <span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">story.tease</span><span class=\"o\">|</span><span class=\"nf\">truncatewords</span><span class=\"s2\">:&quot;100&quot;</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition-philosophy admonition\">\n<p class=\"admonition-title\">設計思想</p>\n<p>なぜ、(ZopeのTALのような) XMLベースのテンプレートではなく、テキストベースのテンプレートを使うのか？それは、Django のテンプレート言語を XML/ HTML テンプレートより使いやすくしたかったからです。ワールドオンラインでは、我々は E メールや JavaScript、CSV のためにそれを使用しています。テンプレート言語は、どんなテキストベースのフォーマットにも使うことができます。</p>\n<p>ああ、それともう一つ: 人間にXMLを編集させることは非常に酷なことです！</p>\n</aside>\n</section>\n<section id=\"variables\">\n<span id=\"template-variables\"></span><h2>変数<a class=\"heading-anchor\" href=\"#variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Variables look like this: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">variable</span> <span class=\"pre\">}}</span></code>. When the template engine\nencounters a variable, it evaluates that variable and replaces it with the\nresult. Variable names consist of any combination of alphanumeric characters\nand the underscore (<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;_&quot;</span></code>) but may not start with an underscore. The dot\n(<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;.&quot;</span></code>) also appears in variable sections, although that has a special\nmeaning, as indicated below. Importantly, <em>you cannot have spaces or\npunctuation characters in variable names.</em></p>\n<p>変数の属性にアクセスするには、ドットを ('<code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code>') を使用します。</p>\n<aside class=\"admonition-behind-the-scenes admonition\">\n<p class=\"admonition-title\">背景</p>\n<p>技術的には、テンプレートシステムがドットを検出した際、以下の参照項目をこの順番で実行しようとします:</p>\n<ul class=\"simple\">\n<li><p>辞書検索</p></li>\n<li><p>属性やメソッドの検索</p></li>\n<li><p>数値のインデックス検索</p></li>\n</ul>\n<p>結果の値が呼び出し可能である場合は、引数なしで呼び出されます。呼び出しの結果は、テンプレートの値となります。</p>\n<p>この検索の手順は、辞書検索を上書きするオブジェクトにおいて、予期しない動作を引き起こす可能性があります。例えば、`` collections.defaultdict`` すべてをループ処理をしようとする、次のコードスニペットを考えてみましょう:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">k</span><span class=\"o\">,</span> <span class=\"nv\">v</span> <span class=\"k\">in</span> <span class=\"nv\">defaultdict.items</span> <span class=\"cp\">%}</span>\n    Do something with k and v here...\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>最初に辞書検索が行われるため、その挙動が動作してしまい、意図していた <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>.items()``メソッドを使用せずに、デフォルト値を提供してしまいます。この場合、最初に辞書を変換することを検討してください。</p>\n</aside>\n<p>In the above example, <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">section.title</span> <span class=\"pre\">}}</span></code> will be replaced with the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> attribute of the <code class=\"docutils literal notranslate\"><span class=\"pre\">section</span></code> object.</p>\n<p>もし存在しない変数を使いたい場合、テンプレートシステムは`デフォルトで``''`` (the empty string)が置かれている場所に、string_if_invalid` のオプション値を挿入します。</p>\n<p>Note that &quot;bar&quot; in a template expression like <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">foo.bar</span> <span class=\"pre\">}}</span></code> will be\ninterpreted as a literal string and not using the value of the variable &quot;bar&quot;,\nif one exists in the template context.</p>\n<p>Variable attributes that begin with an underscore may not be accessed as\nthey're generally considered private.</p>\n</section>\n<section id=\"filters\">\n<h2>フィルター<a class=\"heading-anchor\" href=\"#filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>You can modify variables for display by using <strong>filters</strong>.</p>\n<p>Filters look like this: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">name|lower</span> <span class=\"pre\">}}</span></code>. This displays the value of the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">name</span> <span class=\"pre\">}}</span></code> variable after being filtered through the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-lower\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">lower</span></code></a>\nfilter, which converts text to lowercase. Use a pipe (<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>) to apply a filter.</p>\n<p>Filters can be &quot;chained.&quot; The output of one filter is applied to the next.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">text|escape|linebreaks</span> <span class=\"pre\">}}</span></code> is a common idiom for escaping text contents,\nthen converting line breaks to <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code> tags.</p>\n<p>Some filters take arguments. A filter argument looks like this: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span>\n<span class=\"pre\">bio|truncatewords:30</span> <span class=\"pre\">}}</span></code>. This will display the first 30 words of the <code class=\"docutils literal notranslate\"><span class=\"pre\">bio</span></code>\nvariable.</p>\n<p>Filter arguments that contain spaces must be quoted; for example, to join a\nlist with commas and spaces you'd use <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">list|join:&quot;,</span> <span class=\"pre\">&quot;</span> <span class=\"pre\">}}</span></code>.</p>\n<p>Django provides about sixty built-in template filters. You can read all about\nthem in the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#ref-templates-builtins-filters\"><span class=\"std std-ref\">built-in filter reference</span></a>.\nTo give you a taste of what's available, here are some of the more commonly\nused template filters:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-default\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">default</span></code></a></dt><dd><p>If a variable is false or empty, use given default. Otherwise, use the\nvalue of the variable. For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;nothing&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> isn't provided or is empty, the above will display\n&quot;<code class=\"docutils literal notranslate\"><span class=\"pre\">nothing</span></code>&quot;.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-length\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">length</span></code></a></dt><dd><p>Returns the length of the value. This works for both strings and lists.\nFor example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">['a',</span> <span class=\"pre\">'b',</span> <span class=\"pre\">'c',</span> <span class=\"pre\">'d']</span></code>, the output will be <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code>.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-filesizeformat\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">filesizeformat</span></code></a></dt><dd><p>Formats the value like a &quot;human-readable&quot; file size (i.e. <code class=\"docutils literal notranslate\"><span class=\"pre\">'13</span> <span class=\"pre\">KB'</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'4.1</span> <span class=\"pre\">MB'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'102</span> <span class=\"pre\">bytes'</span></code>, etc.). For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">filesizeformat</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> が 123456789 のとき、出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">117.7</span> <span class=\"pre\">MB</span></code> になります。</p>\n</dd>\n</dl>\n<p>Again, these are just a few examples; see the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#ref-templates-builtins-filters\"><span class=\"std std-ref\">built-in filter reference</span></a> for the complete list.</p>\n<p>You can also create your own custom template filters; see\n<a class=\"reference internal\" href=\"/ja/2.2/howto/custom-template-tags/\"><span class=\"doc\">独自のテンプレートタグとフィルタ</span></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>Django's admin interface can include a complete reference of all template\ntags and filters available for a given site. See\n<a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/admindocs/\"><span class=\"doc\">The Django admin documentation generator</span></a>.</p>\n</aside>\n</section>\n<section id=\"tags\">\n<h2>タグ<a class=\"heading-anchor\" href=\"#tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tags look like this: <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">tag</span> <span class=\"pre\">%}</span></code>. Tags are more complex than variables: Some\ncreate text in the output, some control flow by performing loops or logic, and\nsome load external information into the template to be used by later variables.</p>\n<p>Some tags require beginning and ending tags (i.e. <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">tag</span> <span class=\"pre\">%}</span> <span class=\"pre\">...</span> <span class=\"pre\">tag</span> <span class=\"pre\">contents</span>\n<span class=\"pre\">...</span> <span class=\"pre\">{%</span> <span class=\"pre\">endtag</span> <span class=\"pre\">%}</span></code>).</p>\n<p>Django ships with about two dozen built-in template tags. You can read all about\nthem in the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#ref-templates-builtins-tags\"><span class=\"std std-ref\">built-in tag reference</span></a>. To give\nyou a taste of what's available, here are some of the more commonly used\ntags:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">for</span></code></a></dt><dd><p>Loop over each item in an array.  For example, to display a list of athletes\nprovided in <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_list</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">athlete</span> <span class=\"k\">in</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">athlete.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code></dt><dd><p>Evaluates a variable, and if that variable is &quot;true&quot; the contents of the\nblock are displayed:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span>\n    Number of athletes: <span class=\"cp\">{{</span> <span class=\"nv\">athlete_list</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">elif</span> <span class=\"nv\">athlete_in_locker_room_list</span> <span class=\"cp\">%}</span>\n    Athletes should be out of the locker room soon!\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    No athletes.\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>In the above, if <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_list</span></code> is not empty, the number of athletes\nwill be displayed by the <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">athlete_list|length</span> <span class=\"pre\">}}</span></code> variable. Otherwise,\nif <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_in_locker_room_list</span></code> is not empty, the message &quot;Athletes\nshould be out...&quot; will be displayed. If both lists are empty,\n&quot;No athletes.&quot; will be displayed.</p>\n<p>You can also use filters and various operators in the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a> tag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">athlete_list</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"o\">&gt;</span> <span class=\"m\">1</span> <span class=\"cp\">%}</span>\n   Team: <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">athlete</span> <span class=\"k\">in</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span> ... <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n   Athlete: <span class=\"cp\">{{</span> <span class=\"nv\">athlete_list.0.name</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>While the above example works, be aware that most template filters return\nstrings, so mathematical comparisons using filters will generally not work\nas you expect. <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-length\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">length</span></code></a> is an exception.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> and <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">extends</span></code></a></dt><dd><p>Set up <a class=\"reference internal\" href=\"#id1\">template inheritance</a> (see below), a powerful way\nof cutting down on &quot;boilerplate&quot; in templates.</p>\n</dd>\n</dl>\n<p>Again, the above is only a selection of the whole list; see the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#ref-templates-builtins-tags\"><span class=\"std std-ref\">built-in\ntag reference</span></a> for the complete list.</p>\n<p>You can also create your own custom template tags; see\n<a class=\"reference internal\" href=\"/ja/2.2/howto/custom-template-tags/\"><span class=\"doc\">独自のテンプレートタグとフィルタ</span></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>Django's admin interface can include a complete reference of all template\ntags and filters available for a given site. See\n<a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/admindocs/\"><span class=\"doc\">The Django admin documentation generator</span></a>.</p>\n</aside>\n</section>\n<section id=\"comments\">\n<span id=\"template-comments\"></span><h2>コメント<a class=\"heading-anchor\" href=\"#comments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>To comment-out part of a line in a template, use the comment syntax: <code class=\"docutils literal notranslate\"><span class=\"pre\">{#</span> <span class=\"pre\">#}</span></code>.</p>\n<p>For example, this template would render as <code class=\"docutils literal notranslate\"><span class=\"pre\">'hello'</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"c\">{# greeting #}</span>hello\n</code></pre></div>\n<p>A comment can contain any template code, invalid or not. For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"c\">{# {% if foo %}bar{% else %} #}</span>\n</code></pre></div>\n<p>This syntax can only be used for single-line comments (no newlines are permitted\nbetween the <code class=\"docutils literal notranslate\"><span class=\"pre\">{#</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">#}</span></code> delimiters). If you need to comment out a\nmultiline portion of the template, see the <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-comment\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">comment</span></code></a> tag.</p>\n</section>\n<section id=\"template-inheritance\">\n<span id=\"id1\"></span><h2>テンプレートの継承<a class=\"heading-anchor\" href=\"#template-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django のテンプレートエンジンの中で最もパワフルな -- ゆえに最も複雑な -- 部分が、テンプレートの継承です。テンプレートを継承すると、ベースとなる &quot;骨組みの&quot; テンプレートにサイトの共通要素を記述し、<strong>block</strong> を定義することで子テンプレートにオーバーライドさせることができます。</p>\n<p>テンプレートの継承を理解するには、実例を見るのが一番早いでしょう:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;style.css&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>My amazing site<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;sidebar&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">sidebar</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">&gt;</span>Home<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/blog/&quot;</span><span class=\"p\">&gt;</span>Blog<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;content&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>我々が <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> と呼ぶことになるこのテンプレートは、シンプルな HTML の骨組みを定義し、シンプルな 2 列のサイトを表示できるようになっています。block をコンテンツで埋めるのは、&quot;&quot;子&quot;&quot; テンプレートの仕事です。</p>\n<p>この例では、<a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> タグにより、子テンプレートが埋めることができる 3 つのブロックが定義されています。<a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> タグの仕事は、テンプレートのこれらの部分が子テンプレートによりオーバーライドされる可能性があることをテンプレートエンジンに伝えることです。</p>\n<p>子テンプレートは以下のようになります:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>My amazing blog<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">entry</span> <span class=\"k\">in</span> <span class=\"nv\">blog_entries</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">entry.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">entry.body</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>ここで重要なのは <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">extends</span></code></a> タグです。このタグが、このテンプレートが他のテンプレートを &quot;拡張&quot; することをテンプレートエンジンに伝えるのです。テンプレートシステムがこの点プレートを評価する際に、最初に親テンプレートを探しに行きます -- この例では &quot;base.html&quot; です。</p>\n<p>この時点で、テンプレートエンジンは <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> 内の <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> を認識し、子テンプレートのコンテンツと差し替えます。<code class=\"docutils literal notranslate\"><span class=\"pre\">blog_entries</span></code> の値に応じて、アウトプットは以下のようになります:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;style.css&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>My amazing blog<span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;sidebar&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">&gt;</span>Home<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/blog/&quot;</span><span class=\"p\">&gt;</span>Blog<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;content&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Entry one<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>This is my first entry.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n\n        <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Entry two<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>This is my second entry.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>子テンプレート内で <code class=\"docutils literal notranslate\"><span class=\"pre\">sidebar</span></code> を定義していないため、親テンプレートの値がそのまま使われていることに留意してください。親テンプレートの <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> タグ内のコンテンツは、常にフォールバックとして使用されます。</p>\n<p>継承は、必要なだけ段階を経ることができます。継承を使う一般的な方法は、以下の 3 段階のアプローチです:</p>\n<ul class=\"simple\">\n<li><p>メインのルック・アンド・フィールを保持する <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> を作成します。</p></li>\n<li><p>それぞれの &quot;セクション&quot; に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">base_セクション名.html</span></code> テンプレートを作成します。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">base_news.html</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">base_sports.html</span></code> などです。これらはすべて <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> を拡張 (extends) し、セクション固有のスタイルやデザインを定義します。</p></li>\n<li><p>ページのそれぞれのタイプに対して、個別のテンプレートを作成します。たとえばニュース記事やブログエントリーなどです。これらのテンプレートは、適切なセクションの手プレートを拡張 (extends) します。</p></li>\n</ul>\n<p>このアプローチにより、コードの再利用を最大化でき、共通のコンテンツ部 (全セクション共通のナビゲーションなど) に項目を追加するのが容易になります。</p>\n<p>継承を使用する際のコツをいくつか紹介します:</p>\n<ul>\n<li><p>テンプレート内で <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code></a> を使用する際は、その点プレート内で一番最初のテンプレートタグとして指定する必要があります。それ以外の場合、継承が正しく動作しません。</p></li>\n<li><p>ベースのテンプレートには <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code></a> タグを多く配置するほどよいです。子テンプレートがすべてのブロックを埋める必要がないことを思い出してください。多くのブロック内に適当なデフォルトを記述しておき、必要なものを後で定義し直せばいいのです。フックは多ければ多いほどいいということです。</p></li>\n<li><p>もし同じコンテンツを複数のテンプレート内で記述していたら、そのコンテンツを親テンプレートの <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> に移動させるべきかもしれません。</p></li>\n<li><p>親テンプレートからブロックのコンテンツを取得する必要がある場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">block.super</span> <span class=\"pre\">}}</span></code> が利用できます。親のブロックを完全にオーバーライドせずに、コンテンツを追加したい場合に有用です。<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">block.super</span> <span class=\"pre\">}}</span></code> を使って挿入されたデータは自動的にエスケープされません (<a class=\"reference external\" href=\"#automatic-html-escaping\">next section</a> を参照してください)。これは、必要な場合は親テンプレートですでにエスケープされているからです。</p></li>\n<li><p>テンプレートタグの <code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> シンタックスを使用して <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code></a> の外で生成された変数は、ブロックの内部で使用することはできません。例えば、以下のテンプレートは何も表示しません:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;Title&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">title</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>可読性を増すために、<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">endblock</span> <span class=\"pre\">%}</span></code> タグにも <em>名前</em> を記述できます。例えば:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n...\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>大きなテンプレートでは、このテクニックでどの <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> が閉じられているのかが分かりやすくなります。</p>\n</li>\n</ul>\n<p>最後に、同じテンプレート内で同じ名前の <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> タグを複数定義することはできないことに留意してください。この制限は、block タグが &quot;両方向に&quot; 働くのが理由です。block タグは埋めるための穴を提供するだけではなく -- <em>親テンプレート</em> 内で穴を埋めるコンテンツを定義します。もし同名の <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> がテンプレート内に 2 つ存在すると、どちらのブロックのコンテンツを使うべきかテンプレートの親が判断できなくなってしまうのです。</p>\n</section>\n<section id=\"automatic-html-escaping\">\n<span id=\"id2\"></span><h2>HTML の自動エスケープ<a class=\"heading-anchor\" href=\"#automatic-html-escaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>テンプレートから HTML を生成する時には、変数内の文字が HTML のレンダリング結果に悪影響を与えるというリスクが常に付きまといます。例えば、テンプレートに以下のような箇所がある場合を考えてみましょう:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>Hello, <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>一見、このコードはユーザの名前を表示するだけの無害なものと思えます。しかし次のような値が名前として入力されていれば、何が起きるでしょうか:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span><span class=\"nx\">alert</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">)&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>この値によって、テンプレートは次のように出力されます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>Hello, <span class=\"p\">&lt;</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span><span class=\"nx\">alert</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">)&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>……結果として、ブラウザに JavaScript の警告ボックスをポップアップさせることができてしまいます!</p>\n<p>同様に、名前に <code class=\"docutils literal notranslate\"><span class=\"pre\">'&lt;'</span></code> 文字が含まれていたらどうでしょうか:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>username\n</code></pre></div>\n<p>この値によって、テンプレートはこのように出力されます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>Hello, <span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>username\n</code></pre></div>\n<p>これで、以降の Web ページの内容はすべて太字の表示になってしまいます!</p>\n<p>ユーザーが入力したデータを無条件に信頼したり、直接 Web ページに挿入したりするべきでないことは明らかです。悪意のあるユーザは、この手の抜け穴を使って悪さをするものだからです。こうしたタイプのセキュリティホールの悪用は、 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>クロスサイトスクリプティング <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_(XSS) 攻撃と呼ばれています。</p>\n<p>この問題を防ぐために、二つの方法があります:</p>\n<ul class=\"simple\">\n<li><p>一つは、信頼できない変数は必ず <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> フィルタ (後で述べます) に通すことです。このフィルタは危害を及ぼす可能性をもつ HTML 文字を無害な文字に変換します。 この方法は初期の数年間において Django のデフォルトとして採用されていました。しかしユーザー、すなわち開発者やテンプレートの作者にとっては、すべてのデータをエスケープすることを忘れぬよう注意しなければならないという負担になるのが問題です。</p></li>\n<li><p>もう一つは、 Django の自動 HTML エスケープを使うというものです。この節の後半では自動エスケープの仕組みについて述べます。</p></li>\n</ul>\n<p>デフォルトでは、Django はすべてのテンプレートの変数タグの出力を自動的にエスケープするよう設定されています。具体的には、以下の 5 つの文字がエスケープされます:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;lt;</span></code> に変換</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;gt;</span></code> に変換</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> ( シングルクォート ) を <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;#39;</span></code>　に変換</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;</span></code> ( ダブルクォート ) を <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;quot;</span></code> に変換</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;amp;</span></code> に変換</p></li>\n</ul>\n<p>この動作は、デフォルトで適用されていることを重ねて強調しておきます。Django テンプレートシステムを使っているかぎり、あなたはエスケープに関する問題からは守られているのです。</p>\n<section id=\"how-to-turn-it-off\">\n<h3>自動エスケープをオフにする<a class=\"heading-anchor\" href=\"#how-to-turn-it-off\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>サイト単位やテンプレート単位、あるいは変数単位でデータの自動エスケープ機能を無効にしたい場合には、いくつかの方法があります。</p>\n<p>どんなときに、自動エスケープをオフにする必要があるでしょうか。テンプレート変数の中身は、生の HTML として出力するように意図されたデータかもしれません。そうした場合にはコンテンツがエスケープされてほしくはないでしょう。例えば、データベースに HTML を保存していてテンプレートに直接埋め込みたい場合を考えてみましょう。また、 Django のテンプレートシステムを使って、 HTML 以外 のデータ、例えば電子メールメッセージなどを生成したい場合もあるでしょう。</p>\n<section id=\"for-individual-variables\">\n<h4>変数単位での制御<a class=\"heading-anchor\" href=\"#for-individual-variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>変数単位で個々に自動エスケープを無効にするには、 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">safe</span></code></a> フィルタを使います:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>This will be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>\nThis will not be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>safe という言葉は、これ以上エスケープしないよう保護（safe）するとか、 HTML として解釈しても安全（safe）であるという意味だと考えてください。 例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">'&lt;b&gt;'</span></code> が入っていた場合、出力は以下のようになります:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>This will be escaped: <span class=\"ni\">&amp;lt;</span>b<span class=\"ni\">&amp;gt;</span>\nThis will not be escaped: <span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"for-template-blocks\">\n<h4>テンプレートブロック単位での制御<a class=\"heading-anchor\" href=\"#for-template-blocks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>テンプレート単位で自動エスケープを制御するには、テンプレート (または テンプレートの一部) を、以下のように <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">autoescape</span></code></a> タグで囲みます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n    Hello <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">autoescape</span></code></a> タグは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">on</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">off</span></code> を引数にとります。 テンプレートのある範囲を自動エスケープし、さらにその一部で自動エスケープをオフにしたい場合には、次のようにできます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>Auto-escaping is on by default. Hello <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n    This will not be auto-escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>.\n\n    Nor this: <span class=\"cp\">{{</span> <span class=\"nv\">other_data</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">on</span> <span class=\"cp\">%}</span>\n        Auto-escaping applies again: <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>自動エスケープのタグは、他のブロックタグと同様、タグを設定したテンプレートを継承している他のテンプレートや、 :ttag:<code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> で取り込んだテンプレートでも有効です。例えば:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">base.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">child.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>This <span class=\"ni\">&amp;amp;</span> that<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">greeting</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>ベースのテンプレートで自動エスケープが無効化されているので、子テンプレートでも自動エスケープは無効化されます。結果として、 <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting</span></code> 変数の値が <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>&lt;b&gt;Hello!&lt;/b&gt;'' のとき、以下の HTML が出力されます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>This <span class=\"ni\">&amp;amp;</span> that<span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>Hello!<span class=\"p\">&lt;/</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"notes\">\n<h3>Notes<a class=\"heading-anchor\" href=\"#notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>一般に、テンプレートの作者は自動エスケープをあまり意識する必要はありません。 データをエスケープすべきではない場合を考えたり、データを適切にマークし、テンプレート上でうまく表示されるように考慮するのは、Python 側の開発者 (ビューやカスタムフィルタの開発者)であるべきです。</p>\n<p>もしあなたが作成しているテンプレートがどういった状況で使われるのか分からず、自動エスケープが有効かどうかはっきりしない場合には、エスケープの必要な変数全てに <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> フィルタを追加してください。自動エスケープがオンの場合、 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> フィルタがデータ を二重にエスケープするような危険性はありません。 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> フィルタは自動エスケープされた変数には影響しなません。</p>\n</section>\n<section id=\"string-literals-and-automatic-escaping\">\n<span id=\"id3\"></span><h3>文字列リテラルと自動エスケープ<a class=\"heading-anchor\" href=\"#string-literals-and-automatic-escaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>先に説明したように、フィルタの引数は文字列であってもかまいません:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;This is a string literal.&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>文字列リテラルは、すべて自動エスケープ**されずに**テンプレート内に挿入され、 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">safe</span></code></a> フィルタを通して渡されたかのように振る舞います。なぜならば、テンプレートの作者はその文字列リテラルに何が書かれているかは把握していますし、テンプレートが書かれる時点でテキストが正しくエスケープされていることは確認できるからです。</p>\n<p>したがって、以下のようにテンプレートを書いてください:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;3 &amp;lt; 2&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>以下のようにはしないでください:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;3 &lt; 2&quot;</span> <span class=\"cp\">}}</span>  <span class=\"c\">{# Bad! Don&#39;t do this. #}</span>\n</code></pre></div>\n<p>この事が、変数自身に由来するデータに対して何かを引き起こす恐れはありません。 変数の内容はテンプレート作者の管理外にあり、必要に応じて自動的にエスケープされます。</p>\n</section>\n</section>\n<section id=\"accessing-method-calls\">\n<span id=\"template-accessing-methods\"></span><h2>メソッドへのアクセス<a class=\"heading-anchor\" href=\"#accessing-method-calls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>オブジェクトに備わったほとんどのメソッドは、テンプレートの中からでも呼び出すことができます。これはテンプレートからアクセスできる対象は、単にクラスの属性 (フィールド名のように) やビューを通した変数だけにはとどまらないということを意味します。例えば Django ORM は Foreign キーに関係するオブジェクトの集合を見つけるために <a class=\"reference internal\" href=\"/ja/2.2/topics/db/queries/#topics-db-queries-related\"><span class=\"std std-ref\">&quot;entry_set”</span></a> という構文を提供しています。これによって、例えば “comment” と呼ばれるモデルが Foreign キーで ”task” というモデルに関連づけられている場合、テンプレートは task モデルに添えられた全ての comment に対して以下のようにアクセスできます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">comment</span> <span class=\"k\">in</span> <span class=\"nv\">task.comment_set.all</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">comment</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>同じように、 <a class=\"reference internal\" href=\"/ja/2.2/ref/models/querysets/\"><span class=\"doc\">QuerySets</span></a> は、そこに含まれているオブジェクトの個数を数えるため <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> というメソッドを提供しています。これによって、 task と関連づけられた全てのコメントの数を取得することも出来ます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">task.comment_set.all.count</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>そしてもちろん、モデル自身で明示的に定義したメソッドにも簡単にアクセスすることができます:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">models.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Task</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;bar&quot;</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">template.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">task.foo</span> <span class=\"cp\">}}</span>\n</code></pre></figure>\n<p>Django ではテンプレート内でのプログラム的な処理を意図的に制限しているため、テンプレートからメソッドに引数を渡すことはできません。データはビューの中で計算され、テンプレートへは表示のためだけに渡されるべきだからです。</p>\n</section>\n<section id=\"custom-tag-and-filter-libraries\">\n<span id=\"loading-custom-template-libraries\"></span><h2>カスタムタグとカスタムフィルタのライブラリ<a class=\"heading-anchor\" href=\"#custom-tag-and-filter-libraries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アプリケーションによっては、カスタムのタグやフィルタライブラリを提供しています。これらをテンプレートで使いたい場合、そのアプリケーションが <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#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.humanize'</span></code> が追加されているものとします) 、そしてテンプレート側で <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a> タグを使います:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">humanize</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"m\">45000</span><span class=\"o\">|</span><span class=\"nf\">intcomma</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>この例では、 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a> タグは <code class=\"docutils literal notranslate\"><span class=\"pre\">humanize</span></code> という名前のタグライブラリを読み込み、 <code class=\"docutils literal notranslate\"><span class=\"pre\">intcomma</span></code> フィルタを使えるようにしています。 <a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/admindocs/#module-django.contrib.admindocs\" title=\"django.contrib.admindocs: Django's admin documentation generator.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admindocs</span></code></a> が有効にされている場合、あなたの admin は現在インストールされているアプリケーションのドキュメント文字列を参照してカスタムライブラリの一覧を得ることができます。</p>\n<p><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a> タグは複数のライブラリ名を同時に読み込めます。ライブラリ名は スペースで区切って下さい:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">humanize</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>カスタムのテンプレートライブラリを作成する方法については、:doc:'/howto/custom-template-tags` を参照してください。</p>\n<section id=\"custom-libraries-and-template-inheritance\">\n<h3>カスタムライブラリとテンプレートの継承<a class=\"heading-anchor\" href=\"#custom-libraries-and-template-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>カスタムタグやフィルタライブラリをロードした場合、タグやフィルタは現在のテンプレートだけで利用でき、テンプレート継承パスにおける親テンプレートや子テンプレートでは利用できません。</p>\n<p>例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.html</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">humanize</span> <span class=\"pre\">%}</span></code> というタグが入っていても、子テンプレート ( <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">&quot;foo.html&quot;</span> <span class=\"pre\">%}</span></code> を使っているテンプレート) で humanize という名前のテンプレートタグやフィルタを使えるわけではありません。子テンプレート側で対応するには独自に <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">humanize</span> <span class=\"pre\">%}</span></code> を入れる必要があります。</p>\n<p>これはメンテナンス性と健全性を高めるための仕様です。</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/ja/2.2/ref/templates/\"><span class=\"doc\">The Templates Reference</span></a></dt><dd><p>ビルトインタグ、組み込みフィルタ、代替テンプレート、言語など多くをカバーしています。</p>\n</dd>\n</dl>\n</aside>\n</section>\n</section>","rootId":"the-django-template-language","toc":[{"title":"テンプレート","anchor":"templates","children":[]},{"title":"変数","anchor":"variables","children":[]},{"title":"フィルター","anchor":"filters","children":[]},{"title":"タグ","anchor":"tags","children":[]},{"title":"コメント","anchor":"comments","children":[]},{"title":"テンプレートの継承","anchor":"template-inheritance","children":[]},{"title":"HTML の自動エスケープ","anchor":"automatic-html-escaping","children":[{"title":"自動エスケープをオフにする","anchor":"how-to-turn-it-off","children":[{"title":"変数単位での制御","anchor":"for-individual-variables","children":[]},{"title":"テンプレートブロック単位での制御","anchor":"for-template-blocks","children":[]}]},{"title":"Notes","anchor":"notes","children":[]},{"title":"文字列リテラルと自動エスケープ","anchor":"string-literals-and-automatic-escaping","children":[]}]},{"title":"メソッドへのアクセス","anchor":"accessing-method-calls","children":[]},{"title":"カスタムタグとカスタムフィルタのライブラリ","anchor":"custom-tag-and-filter-libraries","children":[{"title":"カスタムライブラリとテンプレートの継承","anchor":"custom-libraries-and-template-inheritance","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/ja/2.2/ref/"},{"docname":"ref/templates/index","title":"テンプレート","url":"/ja/2.2/ref/templates/"}],"prev":{"docname":"ref/templates/index","title":"テンプレート","url":"/ja/2.2/ref/templates/"},"next":{"docname":"ref/templates/builtins","title":"組み込みタグとフィルタ","url":"/ja/2.2/ref/templates/builtins/"},"formats":{"html":"/ja/2.2/ref/templates/language/","markdown":"/ja/2.2/ref/templates/language.md","json":"/ja/2.2/ref/templates/language.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/ref/templates/language.txt","official":"https://docs.djangoproject.com/ja/2.2/ref/templates/language/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}