{"title":"Conas cúltaca teimpléad saincheaptha a chur i bhfeidhm","version":"6.0","locale":"ga","docname":"howto/custom-template-backend","url":"/ga/6.0/howto/custom-template-backend/","canonical":"https://djangodocs.dev/ga/6.0/howto/custom-template-backend/","summary":"Cúltaca saincheaptha Link to this heading # Seo conas cúltaca teimpléad saincheaptha a chur i bhfeidhm d'fhonn córas teimpléid eile a úsáid. Is aicme é cúltaca…","html":"<h1>Conas cúltaca teimpléad saincheaptha a chur i bhfeidhm<a class=\"heading-anchor\" href=\"#how-to-implement-a-custom-template-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"custom-backends\">\n<h2>Cúltaca saincheaptha<a class=\"heading-anchor\" href=\"#custom-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Seo conas cúltaca teimpléad saincheaptha a chur i bhfeidhm d'fhonn córas teimpléid eile a úsáid. Is aicme é cúltaca teimpléad a fhaigheann <code class=\"docutils literal notranslate\"><span class=\"pre\">Django.Template.Backends.Base.BaseEngine</span></code> oidhreachta. Caithfidh sé <code class=\"docutils literal notranslate\"><span class=\"pre\">get_template</span> <span class=\"pre\">()</span> <span class=\"pre\">``a</span> <span class=\"pre\">chur</span> <span class=\"pre\">i</span> <span class=\"pre\">bhfeidhm</span> <span class=\"pre\">agus</span> <span class=\"pre\">``from_string</span> <span class=\"pre\">()</span></code> roghnach. Seo sampla do leabharlann teimpléad ficseanúil <code class=\"docutils literal notranslate\"><span class=\"pre\">foobar</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateDoesNotExist</span><span class=\"p\">,</span> <span class=\"n\">TemplateSyntaxError</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.backends.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseEngine</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.backends.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">csrf_input_lazy</span><span class=\"p\">,</span> <span class=\"n\">csrf_token_lazy</span>\n\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">foobar</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FooBar</span><span class=\"p\">(</span><span class=\"n\">BaseEngine</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Name of the subdirectory containing the templates for this engine</span>\n    <span class=\"c1\"># inside an installed application.</span>\n    <span class=\"n\">app_dirname</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;foobar&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"p\">):</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n        <span class=\"n\">options</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">params</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">engine</span> <span class=\"o\">=</span> <span class=\"n\">foobar</span><span class=\"o\">.</span><span class=\"n\">Engine</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">template_code</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">from_string</span><span class=\"p\">(</span><span class=\"n\">template_code</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">foobar</span><span class=\"o\">.</span><span class=\"n\">TemplateCompilationFailed</span> <span class=\"k\">as</span> <span class=\"n\">exc</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">TemplateSyntaxError</span><span class=\"p\">(</span><span class=\"n\">exc</span><span class=\"o\">.</span><span class=\"n\">args</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_template</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"n\">template_name</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">foobar</span><span class=\"o\">.</span><span class=\"n\">TemplateNotFound</span> <span class=\"k\">as</span> <span class=\"n\">exc</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">TemplateDoesNotExist</span><span class=\"p\">(</span><span class=\"n\">exc</span><span class=\"o\">.</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">backend</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">foobar</span><span class=\"o\">.</span><span class=\"n\">TemplateCompilationFailed</span> <span class=\"k\">as</span> <span class=\"n\">exc</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">TemplateSyntaxError</span><span class=\"p\">(</span><span class=\"n\">exc</span><span class=\"o\">.</span><span class=\"n\">args</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Template</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">template</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">render</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">context</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;request&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">request</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;csrf_input&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">csrf_input_lazy</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;csrf_token&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">csrf_token_lazy</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</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>\n</code></pre></div>\n<p>Féach <a class=\"reference external\" href=\"https://github.com/django/deps/blob/main/final/0182-multiple-template-engines.rst\">DEP 182</a> le haghaidh tuilleadh eolais.</p>\n</section>\n<section id=\"debug-integration-for-custom-engines\">\n<span id=\"template-debug-integration\"></span><h2>Comhtháthú dífhabhtaithe le haghaidh innill<a class=\"heading-anchor\" href=\"#debug-integration-for-custom-engines\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá crúcaí ag an leathanach dífhabhtaithe Django chun faisnéis mhionsonraithe a sholáthar nuair a thagann earráid Is féidir le hinnill teimpléad saincheaptha na crúcaí seo a úsáid chun an fhaisnéis rianaithe a fheabhsaíonn d'úsáideoirí. Tá na crúcaí seo a leanas ar fáil:</p>\n<section id=\"template-postmortem\">\n<span id=\"id1\"></span><h3>Teimpléad iar-bháis<a class=\"heading-anchor\" href=\"#template-postmortem\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Feictear an post mortem nuair a ardaítear: exc: ~django.template.templateDoesNotExist. Liostaíonn sé na hinnill teimpléid agus na luchtóirí a úsáideadh agus iad ag iarraidh teimpléad ar leith a fháil. Mar shampla, má tá dhá innill Django cumraithe, beidh an post mortem le feiceáil mar:</p>\n<img alt=\"/ga/6.0/_images/postmortem.png\" src=\"/ga/6.0/_images/postmortem.png\" />\n<p>Is féidir le hinnill saincheaptha an post mortem a líonadh trí na hargóintí <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> agus tried a rith agus iad ag ardú: exc: ~django.template.templateDoesNotExist. &lt;template-origin-api&gt;Ba chóir go mbeadh cúltaca a úsáideann an postmortem:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>bunús 'a shonrú ar réad an teimpléid.</p>\n</section>\n<section id=\"contextual-line-information\">\n<h3>Faisnéis líne comhthéacsúil<a class=\"heading-anchor\" href=\"#contextual-line-information\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tharlaíonn earráid le linn parsála nó rindreála teimpléad, is féidir le Django an líne a tharla an earráid air a thaispeáint. Mar shampla:</p>\n<img alt=\"/ga/6.0/_images/template-lines.png\" src=\"/ga/6.0/_images/template-lines.png\" />\n<p>Is féidir le hinnill saincheaptha an fhaisnéis seo a líonadh trí thréith <code class=\"docutils literal notranslate\"><span class=\"pre\">template_debug</span></code> a shocrú ar eisceachtaí a ardaítear le linn parsála agus rindreála. Is é an tréith seo a: class: dict leis na luachanna seo a leanas:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">``ainm</span></code>: Ainm an teimpléid inar tharla an eisceacht.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">`'teachtaireacht</span> <span class=\"pre\">e'</span></code>: An teachtaireacht eisceachta.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">`'source_lines'</span></code>: Na línte roimh, tar éis, agus lena n-áirítear an líne a tharla an eisceacht air. Tá sé seo le haghaidh comhthéacs, mar sin níor chóir go mbeadh níos mó ná 20 líne nó mar sin ann.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'líne</span> <span class=\"pre\">'</span></code>: An uimhir líne ar tharla an eisceacht.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">`roimh</span></code>: An t-ábhar ar an líne earráide roimh an comhartha a d'ardaigh an earráid.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">``le</span> <span class=\"pre\">linn</span> <span class=\"pre\">'</span></code>: An comhartha a d'ardaigh an earráid.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">``tar</span> <span class=\"pre\">éis</span> <span class=\"pre\">'</span></code>: An t-ábhar ar an líne earráide tar éis an chomhartha a d'ardaigh an earráid.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'iomlán'</span></code>: Líon na línte i <code class=\"docutils literal notranslate\"><span class=\"pre\">source_lines</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'top'</span></code>: An uimhir líne ina dtosaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">source_lines</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'bottom'</span></code>: An uimhir líne ina gcríochnaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">source_lines</span></code>.</p></li>\n</ul>\n<p>Mar gheall ar an earráid teimpléid thuas, bheadh cuma <code class=\"docutils literal notranslate\"><span class=\"pre\">template_debug</span></code> mar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span>\n    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/path/to/template.html&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;message&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Invalid block tag: &#39;syntax&#39;&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;source_lines&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;some</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lines</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s2\">&quot;before</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Hello {</span><span class=\"si\">% s</span><span class=\"s2\">yntax error %} {{ world }}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s2\">&quot;some</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lines</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"s2\">&quot;after</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n    <span class=\"s2\">&quot;line&quot;</span><span class=\"p\">:</span> <span class=\"mi\">4</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;before&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Hello &quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;during&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;{</span><span class=\"si\">% s</span><span class=\"s2\">yntax error %}&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;after&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot; {{ world }}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;total&quot;</span><span class=\"p\">:</span> <span class=\"mi\">9</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;bottom&quot;</span><span class=\"p\">:</span> <span class=\"mi\">9</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;top&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"origin-api-and-3rd-party-integration\">\n<span id=\"template-origin-api\"></span><h3>API Origin agus comhtháthú 3ú páirtí<a class=\"heading-anchor\" href=\"#origin-api-and-3rd-party-integration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá réad: class: ~django.template.base.origin ag teimpléid Django ar fáil tríd an tréith <code class=\"docutils literal notranslate\"><span class=\"pre\">template.origin</span></code>. &lt;django-debug-toolbar&gt;Cuireann sé seo ar chumas faisnéis dífhabhtaithe a thaispeáint in:ref: template postmortem &lt;template-postmortem&gt;, chomh maith le leabharlanna 3ú páirtí, cosúil leis an: pypi: Django Debug Toolbar.</p>\n<p>Is féidir le hinnill saincheaptha a gcuid faisnéise <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>template.origin` féin a sholáthar trí réad a chruthú a shonraíonn na tréithe seo a leanas:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">``ainm</span></code>: An cosán iomlán chuig an teimpléad.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'template_name'</span></code>: An cosán coibhneasta chuig an teimpléad mar a chuirtear isteach sna modhanna luchtaithe teimpléad.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">`loader_name'</span></code>: Sreang roghnach a aithníonn an fheidhm nó an rang a úsáidtear chun an teimpléad a luchtú, m.sh. Django.Template.Loaders.FileSystem.Loader`.</p></li>\n</ul>\n</section>\n</section>","rootId":"how-to-implement-a-custom-template-backend","toc":[{"title":"Cúltaca saincheaptha","anchor":"custom-backends","children":[]},{"title":"Comhtháthú dífhabhtaithe le haghaidh innill","anchor":"debug-integration-for-custom-engines","children":[{"title":"Teimpléad iar-bháis","anchor":"template-postmortem","children":[]},{"title":"Faisnéis líne comhthéacsúil","anchor":"contextual-line-information","children":[]},{"title":"API Origin agus comhtháthú 3ú páirtí","anchor":"origin-api-and-3rd-party-integration","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Treoracha conas","url":"/ga/6.0/howto/"}],"prev":{"docname":"howto/overriding-templates","title":"Conas teimpléid a shárú","url":"/ga/6.0/howto/overriding-templates/"},"next":{"docname":"howto/custom-template-tags","title":"Conas clibeanna agus scagairí teimpléad saincheaptha a ch","url":"/ga/6.0/howto/custom-template-tags/"},"formats":{"html":"/ga/6.0/howto/custom-template-backend/","markdown":"/ga/6.0/howto/custom-template-backend.md","json":"/ga/6.0/howto/custom-template-backend.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/howto/custom-template-backend.txt","official":"https://docs.djangoproject.com/ga/6.0/howto/custom-template-backend/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}