{"title":"Ag baint úsáide as meascáin le tuairimí rangbhunaithe","version":"5.2","locale":"ga","docname":"topics/class-based-views/mixins","url":"/ga/5.2/topics/class-based-views/mixins/","canonical":"https://djangodocs.dev/ga/5.2/topics/class-based-views/mixins/","summary":"Caution Is ábhar chun cinn é seo. Moltar eolas oibre ar:doc: ` Tuairimí rangbhunaithe Django <index>`sula ndéantar iniúchadh ar na teicnící seo. Soláthraíonn…","html":"<h1>Ag baint úsáide as meascáin le tuairimí rangbhunaithe<a class=\"heading-anchor\" href=\"#using-mixins-with-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-caution\" role=\"note\">\n<p class=\"admonition-title\">Caution</p>\n<p>Is ábhar chun cinn é seo. Moltar eolas oibre ar:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Tuairimí rangbhunaithe Django &lt;index&gt;`sula ndéantar iniúchadh ar na teicnící seo.</p>\n</aside>\n<p>Soláthraíonn tuairimí rang-bhunaithe ionsuite Django go leor feidhmiúlachta, ach b'fhéidir gur mhaith leat cuid de a úsáid ar leithligh. Mar shampla, b'fhéidir gur mhaith leat dearcadh a scríobh a léiríonn teimpléad chun an freagra HTTP a dhéanamh, ach ní féidir leat:class: ~django.views.generic.base.templateView a úsáid; b'fhéidir nach gcaithfidh tú teimpléad a rinneadh ach ar POST `, le GET` ag déanamh rud éigin eile go hiomlán. Cé go bhféadfá: class: ~django.template.response.templateResponse a úsáid go díreach, is dócha go mbeidh cód dúblach mar thoradh air seo.</p>\n<p>Ar an gcúis seo, soláthraíonn Django roinnt meascáin freisin a sholáthraíonn feidhmiúlacht níos scoite. Tá rindreáil teimpléad, mar shampla, ionfhabhtaithe in:class: ~Django.Views.Generic.Base.TemplateResponseMixin. Tá doiciméadú tagartha Django: doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>doiciméadú iomlán de na meascáin go lé&#64;&#64;&lt;/ref/class-based-views/mixins&gt; ir'.</p>\n<section id=\"context-and-template-responses\">\n<h2>Freagraí comhthéacs agus teimplé<a class=\"heading-anchor\" href=\"#context-and-template-responses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Cuirtear dhá mheascán lárnach ar fáil a chuidíonn le comhéadan comhsheasmhach a sholáthar chun oibriú le teimpléid i dtuairimí rangbhunaithe.</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin\" title=\"django.views.generic.base.TemplateResponseMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponseMixin</span></code></a></dt><dd><p>Glaoifidh gach amharc tógtha a thugann a:class: ~Django.Template.Response.TemplateResponse ar an modh:: ~Django.Views.Generic.Base.TemplateResponseMixin.Render_to_Response () `a sholáthraíonn ``TemplateResponsemixin`. An chuid is mó den am a ghlaofar duit é seo (mar shampla, glaonn sé leis an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a chuireann an bheach:class: ~django.views.generic.base.templateView agus:class: ~django.views.generic.detail.detailView); ar an gcaoi chéanna, ní dócha go mbeidh ort é a shárú, cé más mian leat do fhreagra chun rud éigin nár rindreáiltear trí theimpléad Django a thabhairt ar ais ansin beidh tú ag iarraidh é a dhéanamh. &lt;jsonresponsemixin-example&gt;Mar shampla de seo, féach an:ref: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>JSONResponseMixin sampla <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>.</p>\n<p>Glaonn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>render_to_response () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>féin: meth: ~django.views.generic.base.templateResponseMixin.get_template_names, a fhéachfaidh suas:attr: ~Django.Views.Generic.Base.TemplateResponseMixin.Template_Names ar an radharc rang-bhunaithe; dhá mixins eile (:class: ~Django.Views.Generic.Detail.SingleObjectTemplateResponseMixin agus:class: ~Django.Views.Generic.List.MultipleObjectTemplateResponseMixin) athsháraigh é seo chun réamhshocruithe níos solúbtha a sholáthar agus tú ag déileáil le rudaí iarbhír.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin\" title=\"django.views.generic.base.ContextMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ContextMixin</span></code></a></dt><dd><p>Ba chóir do gach duine tógtha a dteastaíonn sonraí comhthéacs uathu, mar shampla chun teimpléad a rindreáil (lena n-áirítear <code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponseMixin</span></code> thuas), glao:meth: ~django.views.generic.base.contextMixin.get_context_data () `ag dul ar aon sonraí a theastaíonn uathu ann mar argóintí eochairfhocal. Tugann ``get_context_data () ``foclóir ar ais; i `ContextMixin` filleann sé a argóintí eochairfhocal ar ais, ach is coitianta é seo a shárú chun níos mó baill a chur leis an bhfoclóir. Is féidir leat an tréith: attr: ~django.views.generic.base.contextMixin.EXTRA_CONTEXT a úsáid freisin.</p>\n</dd>\n</dl>\n</section>\n<section id=\"building-up-django-s-generic-class-based-views\">\n<h2>Tuairimí cineálacha aicmbunaithe Django a thógáil<a class=\"heading-anchor\" href=\"#building-up-django-s-generic-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Féachaimis ar an gcaoi a ndéantar dhá cheann de thuairimí cineálacha aicmbunaithe Django a thógtar as meascáin a sholáthraíonn feidhmiúlacht scoite. Déanfaimid breithniú:class: ~django.views.generic.detail.detailView, a thugann dearcadh “mionsonraithe” ar réad, agus:class: ~django.views.generic.list.listView, a thabharfaidh liosta rudaí, de ghnáth ó shuíomh ceisteanna, agus iad a leathanaigh roghnach. Tabharfaidh sé seo ceithre mheascáin in aithne dúinn a sholáthraíonn feidhmiúlacht úsáideach eatarthu agus iad ag obair le réad Django amháin, nó le rudaí iolracha.</p>\n<p>Tá meascáin ann freisin leis na tuairimí eagarthóireachta cineálacha (:class: ~django.views.generic.edit.formView, agus na radhairc samhail-shonrach: class: ~django.views.generic.edit.createView, :class: ~django.views.generic.edit.updateView agus:class: ~django.views.generic.Edit.deleteView), agus sna tuairimí cineálacha dáta-bhunaithe. Tá siad seo clúdaithe sa doiciméadú tagartha: 'mixin tagartha'&lt;/ref/class-based-views/mixins&gt;.</p>\n<section id=\"detailview-working-with-a-single-django-object\">\n<h3><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DetailView <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>: ag obair le réad amháin Django<a class=\"heading-anchor\" href=\"#detailview-working-with-a-single-django-object\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chun mionsonraí réada a thaispeáint, ní mór dúinn dhá rud a dhéanamh go bunúsach: ní mór dúinn breathnú suas ar an réad agus ansin caithfimid a:class: ~django.template.Response.TemplateResponse le teimpléad oiriúnach, agus an réad sin mar chomhthéacs.</p>\n<p>Chun an réad a fháil, braitheann :class: ~django.views.generic.detailView ar:class: ~django.views.generic.detail.singleObjectMixin, a sholáthraíonn a:meth: ~django.views.generic.detail.singleObjectMixin.get_Object modh a chuireann amach an réad bunaithe ar URL an iarratais (féachann sé argóintí eochairfhocal <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> agus slug` mar a dearbhaíodh sa URLConf, agus féachann sé an réad suas ón tréith: :attr: ~django.views.generic.detail.singleObjectMixin.Model ar an radharc, nó an tréith: attr: ~django.views.generic.detail.singleObjectMixin.QuerySet má chuirtear é sin ar fáil). Sáraíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code> freisin: meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.views.generic.base.contextMixin.get_context_data () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>, a úsáidtear ar fud gach Django atá tógtha i dtuairimí rang-bhunaithe chun sonraí comhthéacs a sholáthar do léirithe teimpléad.</p>\n<p>Chun a dhéanamh ansin a:class: ~django.template.Response.TemplateResponse, :class: detailView úsáideas:class: ~django.views.generic.detail.singleObjectTemplateResponseMixin, a leathnaí:class: ~django.views.generic.base.templateResponseMixin, a leathnaíonn: meth: ~Django.Views.Generic.Base.TemplateResponseMixin.get_Template_Names () `mar a pléadh thuas. Soláthraíonn sé tacar réasúnta sofaisticiúil roghanna i ndáiríre, ach is é ``&lt;app_label&gt;/&lt;model_name&gt;_detail.html` an ceann is mó a úsáidfidh mórchuid na ndaoine. Is féidir an chuid <code class=\"docutils literal notranslate\"><span class=\"pre\">_detail</span></code> a athrú trí shocting:attr: ~django.views.generic.detail.singleObjectTemplateResponseMixin.Template_Name_suffix ar fho-aicme go rud éigin eile. (Mar shampla, bain &lt;generic-editing&gt;úsáid as de:doc: tuairimí eagarthóireachta cineálacha ```_form` chun tuairimí a chruthú agus a nuashonrú, agus <code class=\"docutils literal notranslate\"><span class=\"pre\">_confirm_delete</span></code> chun tuairimí a scriosadh.)</p>\n</section>\n<section id=\"listview-working-with-many-django-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ListView</span></code>: ag obair le go leor rudaí Django<a class=\"heading-anchor\" href=\"#listview-working-with-many-django-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Leanann liostaí rudaí thart ar an bpatrún céanna: teastaíonn liosta rudaí (leathanaithe b'fhéidir) uainn, de ghnáth a:class: ~django.db.models.query.querySet, agus ansin ní mór dúinn a dhéanamh a:class: ~django.template.response.templateResponse le teimpléad oiriúnach ag baint úsáide as an liosta rudaí sin.</p>\n<p>Chun na rudaí a fháil, úsáideann :class: ~Django.Views.Generic.List.ListView: Class: ~Django.Views.Generic.List.MultipleObjectMixin, a sholáthraíonn an bheath:meth: ~Django.Views.Generic.List.MultipleObjectMixin.get_QuerySet agus:meth: ~django..S.Generic.List.MultipleObjectMixin.Paginate_QuerySet. Murab ionann agus la:class: ~django.views.generic.detail.singleObjectMixin, ní gá codanna den URL a chur amach chun an tacar ceisteanna a oibriú leis, mar sin úsáideann an réamhshocraithe:attr: ~Django.Views.Generic.List.MultipleObjectMixin.QuerySet nó:attr: ~Django.Views.Generic.List.MultipleObjectMixin.QuerySet nó:attr: ~Django.Views.Generic.Generic.List.MultipleObjectMixin.QuerySet nó: attr: ~django.views.Generic.Generic.List.MultipleObjectMixin.Tréith IC.List.MultipleObjectMixin.Model ar an rang amharc. Cúis choitianta chun athrú: meth: ~django.views.generic.list.multipleObjectMixin.get_querySet anseo ná na rudaí a athrú go dinimiciúil, mar shampla ag brath ar an úsáideoir reatha nó poist a eisiamh sa todhchaí do bhlag.</p>\n<p><a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin\" title=\"django.views.generic.list.MultipleObjectMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultipleObjectMixin</span></code></a> also overrides\n<a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.get_context_data\" title=\"django.views.generic.base.ContextMixin.get_context_data\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_context_data()</span></code></a> to\ninclude appropriate context variables for pagination (providing\ndummies if pagination is disabled). It relies on <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> being\npassed in as a keyword argument, which <a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/flattened-index/#ListView\" title=\"ListView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ListView</span></code></a> arranges for\nit.</p>\n<p>&lt;django.views.generic.list.MultipleObjectTemplateResponseMixin&gt;&lt;app_label&gt;&lt;model_name&gt;Chun a dhéanamh a:class: ~django.template.Response.TemplateResponse, :class: ListView ansin úsáideas:class: ~django.views.generic.list.multipleObjectTemplateResponseMiXin; mar le:class: ~django.views.generic.detail.singleObjectTemplateResponseMixin thuas, Sáraíonn sé seo <code class=\"docutils literal notranslate\"><span class=\"pre\">get_template_names</span> <span class=\"pre\">()</span> <span class=\"pre\">``chun:</span> <span class=\"pre\">meth:</span> <span class=\"pre\">`raon</span> <span class=\"pre\">roghanna</span> <span class=\"pre\">`a</span> <span class=\"pre\">sholáthar,</span> <span class=\"pre\">agus</span> <span class=\"pre\">is</span> <span class=\"pre\">é</span> <span class=\"pre\">an</span> <span class=\"pre\">ceann</span> <span class=\"pre\">is</span> <span class=\"pre\">coitianta</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáidtear</span> <span class=\"pre\">ná</span></code>/_list.html``, agus an chuid <code class=\"docutils literal notranslate\"><span class=\"pre\">_list</span></code> á ghlacadh arís ó:attr: ~django.views.generic.list. MultipleObjectTemplateResponseMixin.Template_Name_Suffix tréith. (Úsáideann na tuairimí cineálacha dáta-bhunaithe iarmhairtí mar <code class=\"docutils literal notranslate\"><span class=\"pre\">_archive</span></code>, _archive_year` agus mar sin de chun teimpléid éagsúla a úsáid do na tuairimí speisialaithe liosta dáta-bhunaithe.)</p>\n</section>\n</section>\n<section id=\"using-django-s-class-based-view-mixins\">\n<h2>Ag baint úsáide as meascáin radharc rang-bhunaithe Django<a class=\"heading-anchor\" href=\"#using-django-s-class-based-view-mixins\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Anois chonaic muid conas a úsáideann tuairimí cineálacha aicmbunaithe Django na meascáin a chuirtear ar fáil, féachaimis ar bhealaí eile is féidir linn iad a chur le chéile. Táimid fós ag cur le chéile iad le tuairimí rang-bhunaithe ionsuite, nó tuairimí cineálacha eile bunaithe ar rang, ach tá raon fadhbanna níos annamh ann is féidir leat a réiteach ná mar a sholáthraíonn Django as an mbosca.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Ní féidir gach meascán a úsáid le chéile, agus ní féidir gach tuairim chineálach bunaithe ar rang a úsáid le gach meascán eile. Cuirimid cúpla sampla i láthair anseo a oibríonn; más mian leat feidhmiúlacht eile a thabhairt le chéile ansin beidh ort machnamh a dhéanamh ar idirghníomhaíochtaí idir tréithe agus modhanna a fhorluíonn idir na ranganna éagsúla atá á úsáid agat, agus conas a rachaidh 'ordú réitigh modh' _ i bhfeidhm ar na leaganacha de na modhanna a ghlaofar san ord.</p>\n<p>Cuideoidh an doiciméadú tagartha do Djangos:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>tuairimí rang-bhunaithe agus:doc: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>meascáin amhairc range-bhunaithe '&lt;/ref/class-based-views/index&gt; leat tuiscint a fháil ar na tréithe agus na modhanna is dócha a chruthóidh&lt;/ref/class-based-views/mixins&gt; coinbhleacht idir ranganna agus meascáin éagsúla.</p>\n<p>Má tá amhras ort, is minic gur fearr siúl agus do chuid oibre a bhunú ar:class: View nó:class: TemplateView, b'fhéidir le:class: ~django.views.generic.detail.singleObjectMixin agus:class: ~django.views.generic.list.multipleObjectMixin. Cé gur dócha go scríobhfaidh tú níos mó cód, is dóichí go mbeidh sé intuigthe go soiléir do dhuine eile ag teacht chuige níos déanaí, agus le níos lú idirghníomhaíochtaí a bheith buartha faoi, sábhálfaidh tú roinnt smaointeoireachta duit féin. (Ar ndóigh, is féidir leat tumadh i gcónaí i bhfeidhm Django ar na tuairimí cineálacha aicmbunaithe le haghaidh inspioráide maidir le conas dul i ngleic le fadhbanna.)</p>\n</aside>\n<section id=\"using-singleobjectmixin-with-view\">\n<h3>Ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code> le View<a class=\"heading-anchor\" href=\"#using-singleobjectmixin-with-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Más mian linn dearcadh rang-bhunaithe a scríobh nach bhfreagraíonn ach do POST `, déanfaimid fo-class:class: ~django.views.generic.base.view agus scríobhfaimid modh <code class=\"docutils literal notranslate\"><span class=\"pre\">post</span> <span class=\"pre\">()</span></code> sa fho-rang. Mar sin féin más mian linn go n-oibreoidh ár bpróiseáil ar réad áirithe, a aithnítear ón URL, beidh muid ag iarraidh an fheidhmiúlacht a sholáthraí:class: ~django.views.generic.detail.singleObjectMixin.</p>\n<p>&lt;generic-display&gt;Taispeánfaimid é seo leis an tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Údar</span></code> a d'úsáid muid in:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>réamhrá tuairimí cineálacha aicmbunaithe <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseForbidden</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">View</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.detail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SingleObjectMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">books.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RecordInterestView</span><span class=\"p\">(</span><span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">View</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;Records the current user&#39;s interest in an author.&quot;&quot;&quot;</span>\n\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseForbidden</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Look up the author we&#39;re interested in.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Actually record interest somehow here!</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span>\n            <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;author-detail&quot;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">})</span>\n        <span class=\"p\">)</span>\n</code></pre></figure>\n<p>Go praiticiúil is dócha gur mhaith leat an spéis i siopa luach eochair a thaifeadadh seachas i mbunachar sonraí coibhneasta, mar sin tá an beagán sin fágtha againn amach. Is é an t-aon chuid den dearcadh a chaithfidh a bheith buartha fao:class: ~django.views.generic.detail.singleObjectMixin an áit ar mhaith linn breathnú suas ar an údar atá suim againn ann, rud a dhéanann sé le glao ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>self.get_object () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Tugann an mixin aire dúinn gach rud eile.</p>\n<p>Is féidir linn é seo a cheangal isteach inár URLanna go héasca go leor:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code></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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">books.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RecordInterestView</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;author/&lt;int:pk&gt;/interest/&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">RecordInterestView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author-interest&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Tabhair faoi deara an grúpa ainmnithe pk`, a úsáideann: meth: ~django.views.generic.detail.singleObjectMixin.get_Object chun an sampla <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Author <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a fheiceáil suas. D'fhéadfá slag a úsáid freisin, nó aon cheann de na gnéithe eile de:class: ~Django.Views.Generic.Detail.SingleObjectMixin.</p>\n</section>\n<section id=\"using-singleobjectmixin-with-listview\">\n<h3>Ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code> le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ListView ``<a class=\"heading-anchor\" href=\"#using-singleobjectmixin-with-listview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ga/5.2/ref/class-based-views/generic-display/#django.views.generic.list.ListView\" title=\"django.views.generic.list.ListView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ListView</span></code></a> provides built-in\npagination, but you might want to paginate a list of objects that are\nall linked (by a foreign key) to another object. In our publishing\nexample, you might want to paginate through all the books by a\nparticular publisher.</p>\n<p>Bealach amháin chun é seo a dhéanamh ná: class: ListView a chomhcheangal la:class: ~django.views.generic.detail.singleObjectMixin, ionas gur féidir leis an tacar ceisteanna don liosta leathanaigh leabhar crochadh as an foilsitheoir a aimsítear mar an réad aonair. D'fhonn é seo a dhéanamh, ní mór dúinn dhá cheist éagsúla a bheith againn:</p>\n<dl class=\"simple\">\n<dt>Tacar fiosrúcháin <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> le húsáid ag:class: ~Django.Views.Generic.List.ListView</dt><dd><p>&lt;backwards-related-objects&gt;Ós rud é go bhfuil rochtain againn ar an Foilsitheoir ``a gcuid leabhair ba mhaith linn a liostáil, déanaimid ``get_queryset ()` a shárú agus úsáidimid an <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher`</span></code>:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>bainisteoir eochair eachtrach ar ais <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</dd>\n<dt>Tacar ceisteanna <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher</span></code> le húsáid in:meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.views.generic.detail.singleObjectMixin.get_Object () `</dt><dd><p>Beidh muid ag brath ar chur i bhfeidhm réamhshocraithe <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object</span> <span class=\"pre\">()</span> <span class=\"pre\">``chun</span> <span class=\"pre\">an</span> <span class=\"pre\">réad</span> <span class=\"pre\">ceart</span> <span class=\"pre\">``Publisher</span></code> a fháil. Mar sin féin, ní mór dúinn argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> a rith go sainráite mar ar shlí eile ghlaoigh cur i bhfeidhm réamhshocraithe <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object</span> <span class=\"pre\">()</span> <span class=\"pre\">```get_queryset</span> <span class=\"pre\">()</span></code> a bhfuil athbhreithnithe againn chun rudaí <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> a thabhairt ar ais in ionad <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher</span></code> cinn.</p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Caithfimid smaoineamh go cúramach ar <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data</span> <span class=\"pre\">()</span> <span class=\"pre\">``.</span> <span class=\"pre\">Ós</span> <span class=\"pre\">rud</span> <span class=\"pre\">é</span> <span class=\"pre\">go</span> <span class=\"pre\">gcuirfidh</span> <span class=\"pre\">an</span> <span class=\"pre\">bheath:class:</span> <span class=\"pre\">`~django.views.generic.detail.singleObjectMixin`</span> <span class=\"pre\">agus:class:</span> <span class=\"pre\">`ListView`</span> <span class=\"pre\">rudaí</span> <span class=\"pre\">sna</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">comhthéacs</span> <span class=\"pre\">faoi</span> <span class=\"pre\">luach</span> <span class=\"pre\">``context_object_name</span></code> má tá sé socraithe, cinnteoimid go sainráite go bhfuil an <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher</span> <span class=\"pre\">``sna</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">comhthéacs.</span> <span class=\"pre\">:class:</span> <span class=\"pre\">Cuirfidh</span> <span class=\"pre\">`ListView`</span> <span class=\"pre\">an</span> <span class=\"pre\">``page_obj</span></code> oiriúnach agus <code class=\"docutils literal notranslate\"><span class=\"pre\">paginator</span></code> dúinn ar choinníoll go gcuimhnimid glaoch ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>super () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</aside>\n<p>Anois is féidir linn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>PublisherDetailView <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>nua a scríobh:</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.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.detail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SingleObjectMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">books.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Publisher</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PublisherDetailView</span><span class=\"p\">(</span><span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;books/publisher_detail.html&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;publisher&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span><span class=\"o\">.</span><span class=\"n\">book_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Tabhair faoi deara conas a shocraímid <code class=\"docutils literal notranslate\"><span class=\"pre\">self.object</span></code> laistigh de <code class=\"docutils literal notranslate\"><span class=\"pre\">get</span> <span class=\"pre\">()</span> <span class=\"pre\">``ionas</span> <span class=\"pre\">gur</span> <span class=\"pre\">féidir</span> <span class=\"pre\">linn</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáid</span> <span class=\"pre\">arís</span> <span class=\"pre\">níos</span> <span class=\"pre\">déanaí</span> <span class=\"pre\">i</span> <span class=\"pre\">``get_context_data</span> <span class=\"pre\">()</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset</span> <span class=\"pre\">()</span> <span class=\"pre\">``.</span> <span class=\"pre\">Mura</span> <span class=\"pre\">socraíonn</span> <span class=\"pre\">tú</span> <span class=\"pre\">``template_name</span></code>, réamhshocróidh an teimpléad ar an rogha gnáth:class: ListView, arb é sa chás seo <code class=\"docutils literal notranslate\"><span class=\"pre\">”</span> <span class=\"pre\">books/book_list.html</span> <span class=\"pre\">“</span></code> toisc gur liosta leabhair é; :class: ListView níl aon rud aige fao:class: ~django.views.generic.detail.singleObjectMixin, mar sin níl aon leid aige Is é an dearcadh a bhaineann le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Foilsitheoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Tá an <code class=\"docutils literal notranslate\"><span class=\"pre\">paginate_by</span></code> beag d'aon ghnó sa sampla mar sin ní gá duit go leor leabhar a chruthú chun an leathanaigh a fheiceáil ag obair! Seo an teimpléad ba mhaith leat a úsáid:</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\">content</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Publisher <span class=\"cp\">{{</span> <span class=\"nv\">publisher.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n      <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">book</span> <span class=\"k\">in</span> <span class=\"nv\">page_obj</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\">book.title</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\">ol</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;pagination&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;step-links&quot;</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">page_obj.has_previous</span> <span class=\"cp\">%}</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;?page=</span><span class=\"cp\">{{</span> <span class=\"nv\">page_obj.previous_page_number</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>previous<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n            <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;current&quot;</span><span class=\"p\">&gt;</span>\n                Page <span class=\"cp\">{{</span> <span class=\"nv\">page_obj.number</span> <span class=\"cp\">}}</span> of <span class=\"cp\">{{</span> <span class=\"nv\">paginator.num_pages</span> <span class=\"cp\">}}</span>.\n            <span class=\"p\">&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n\n            <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">page_obj.has_next</span> <span class=\"cp\">%}</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;?page=</span><span class=\"cp\">{{</span> <span class=\"nv\">page_obj.next_page_number</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>next<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">span</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=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"avoid-anything-more-complex\">\n<h2>Seachain aon rud níos casta<a class=\"heading-anchor\" href=\"#avoid-anything-more-complex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Go ginearálta is féidir leat: class: ~Django.Views.Generic.Base.TemplateResponseMixin agus:class: ~Django.Views.Generic.Detail.SingleObjectMixin nuair a theastaíonn a bhfeidhmiúlacht uait. Mar a thaispeántar thuas, le beagán cúraim is féidir leat fiú <code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code> a chomhcheangal la:class: ~django.views.Generic.List.ListView. Mar sin féin éiríonn rudaí níos casta de réir mar a dhéanann tú iarracht é sin a dhéanamh, agus is é riail mhaith ordóige:</p>\n<aside class=\"admonition admonition-hint\">\n<p class=\"admonition-title\">Hint</p>\n<p>&lt;generic-editing&gt;Níor cheart gach ceann de do thuairimí a úsáid ach meascáin nó tuairimí ó cheann de na grúpaí tuairimí cineálacha aicme bunaithe: :doc: detail, list &lt;generic-display&gt;, :doc: eagarthóireacht agus dáta. Mar shampla tá sé go maith le chéile: Class: TemplateView (tógtha in amharc) la:class: ~django.views.generic.list.multipleObjectMixin (liosta cineálach), ach is dócha go mbeidh fadhbanna agat <code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code> (mionsonraí cineálach) a chomhcheangal le MultipleObjectMixin` (liosta cineálach).</p>\n</aside>\n<p>Chun a thaispeáint cad a tharlaíonn nuair a dhéanann tú iarracht a bheith níos sofaisticiúla, taispeánann muid sampla a íobraíonn inléiteacht agus inchothabháil nuair a bhíonn réiteach níos simplí ann. Ar dtús, féachaimis ar iarracht naif chun: class: ~django.views.generic.detailView a chomhcheangal le: :class: ~django.views.generic.edit.formMixin chun a chumas dúinn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>POST <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>django:Class: ~django.forms.forms.form ar an URL céanna agus muid ag taispeáint réad ag baint úsáide:class: Detail:`Amharc.</p>\n<section id=\"using-formmixin-with-detailview\">\n<h3>Ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">FormMixin</span></code> le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DetailView ``<a class=\"heading-anchor\" href=\"#using-formmixin-with-detailview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Smaoinigh ar ais ar ár sampla níos luaithe maidir le húsáid: class: View agus:class: ~django.views.generic.detail.singleObjectMixin le chéile. Bhíomar ag taifeadadh spéis úsáideora in údar áirithe; abair anois gur mhaith linn ligean dóibh teachtaireacht a fhágáil ag rá cén fáth gur maith leo iad. Arís, glacaimis leis nach bhfuilimid chun é seo a stóráil i mbunachar sonraí coibhneasta ach ina ionad sin i rud éigin níos esoteric nach mbeidh imní orainn faoi anseo.</p>\n<p>Ag an bpointe seo tá sé nádúrtha teacht ar a:class: ~django.forms.form chun an fhaisnéis a sheoltar ó bhrabhsálaí an úsáideora chuig Django a chumhdú. Abair freisin go bhfuil infheistíocht mhór againn i <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Representational_state_transfer\">REST</a>, mar sin ba mhaith linn an URL céanna a úsáid chun an t-údar a thaispeáint agus chun an teachtaireacht a ghabháil ón úsáideoir. Déanaimis ár “AuthorDetailView” a athscríobh chun é sin a dhéanamh.</p>\n<p>Coinneoimid an láimhseáil <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> ó:class: detailView, cé go mbeidh orainn a:class: ~django.forms.form a chur isteach sna sonraí comhthéacs ionas gur féidir linn é a rinneadh sa teimpléad. Beidh muid ag iarraidh próiseáil foirme a tharraingt isteach ó:class: ~django.views.generic.edit.formMixin, agus beagán cód a scríobh ionas go gcuirfear an fhoirm ar POST` glaoch go cuí ar an bhfoirm.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Úsáidimid: class: ~django.views.generic.edit.formMixin agus cuirimid post () ``i bhfeidhm féin seachas iarracht a mheascadh le:class: `FormView (a sholáthraíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">post</span> <span class=\"pre\">()</span></code> oiriúnach cheana féin) toisc go gcuireann an dá thuairim <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>i bhfeidhm, agus bheadh rudaí i bhfad níos mearbhall.</p>\n</aside>\n<p>Breathnaíonn ár “AuthorDetailView” nua mar seo:</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=\"c1\"># CAUTION: you almost certainly do not want to do this.</span>\n<span class=\"c1\"># It is provided as part of a discussion of problems you can</span>\n<span class=\"c1\"># run into when combining different generic class-based view</span>\n<span class=\"c1\"># functionality that is not designed to be used together.</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseForbidden</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DetailView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.edit</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FormMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">books.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorInterestForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorDetailView</span><span class=\"p\">(</span><span class=\"n\">FormMixin</span><span class=\"p\">,</span> <span class=\"n\">DetailView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">AuthorInterestForm</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_success_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;author-detail&quot;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">})</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseForbidden</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_form</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form_invalid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Here, we would record the user&#39;s interest using the message</span>\n        <span class=\"c1\"># passed in form.cleaned_data[&#39;message&#39;]</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Soláthraíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">get_success_url</span> <span class=\"pre\">()</span> <span class=\"pre\">``áit</span> <span class=\"pre\">éigin</span> <span class=\"pre\">le</span> <span class=\"pre\">atreorú</span> <span class=\"pre\">chuig,</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáidtear</span> <span class=\"pre\">i</span> <span class=\"pre\">bhfeidhm</span> <span class=\"pre\">réamhshocraithe</span> <span class=\"pre\">``form_valid</span> <span class=\"pre\">()</span></code>. Caithfimid ár “post ()” féin a sholáthar mar a luadh níos luaithe.</p>\n</section>\n<section id=\"a-better-solution\">\n<h3>Réiteach níos fearr<a class=\"heading-anchor\" href=\"#a-better-solution\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá líon na n-idirghníomhaíochtaí caolchúiseach idir:class: ~django.views.generic.edit.formMixin agus:class: detailView ag tástáil ár gcumas rudaí a bhainistiú cheana féin. Ní dócha go mbeadh tú ag iarraidh an cineál seo ranga a scríobh tú féin.</p>\n<p>Sa chás seo, d'fhéadfá an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>post () a scríobh tú féin, ag coinneáil: class: `DetailView mar an t-aon fheidhmiúlacht chineálach, cé go bhfuil go leor dúbailte i gceist le cód láimhseála ag scríbhneo:class: ~django.forms.form.</p>\n<p>De rogha air sin, bheadh sé níos lú oibre fós ná an cur chuige thuas dearcadh ar leithligh a bheith agat chun an fhoirm a phróiseáil, a d'fhéadfaí úsáid: class: ~django.views.generic.edit.formView ar leithligh ó:class: detailView gan imní.</p>\n</section>\n<section id=\"an-alternative-better-solution\">\n<h3>Réiteach malartach níos fearr<a class=\"heading-anchor\" href=\"#an-alternative-better-solution\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is é an rud atá againn i ndáiríre ag iarraidh a dhéanamh anseo ná dhá dhearcadh éagsúla bunaithe ar rang a úsáid ón URL céanna. Mar sin, cén fáth nach ndéanfaidh sé sin díreach? Tá rannán an-shoiléir againn anseo: ba chóir go bhfaighidh iarratais <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> an:class: detailView (leis na:class: ~django.forms.form curtha leis na sonraí comhthéacs), agus ba chóir go bhfaighidh iarratais <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>POST <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an:class: FormView. Déanaimis na tuairimí sin a bhunú ar dtús.</p>\n<p>Tá an dearcadh <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthorDetailView</span></code> beagnach mar an gcéanna len:ref: nuair a thugamar AuthorDetailView isteach ar dtús `&lt;generic-views-extra-work&gt;; caithfimid ár ``get_context_data () ``féin a scríobh chun an `AuthorInterestForm` a chur ar fáil don teimpléad. Sceapfaimid an “get_object ()” a shárú ó roimhe seo le haghaidh soiléireachta:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DetailView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">books.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorInterestForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorDetailView</span><span class=\"p\">(</span><span class=\"n\">DetailView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">AuthorInterestForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n</code></pre></div>\n<p>Ansin is é an AuthorInterestFormView` a:class: FormView, ach caithfimid a thabhairt isteach: class: ~django.views.generic.detail.singleObjectMixin ionas gur féidir linn an t-údar atá á caint air a fháil, agus caithfimid cuimhneamh ar <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> a shocrú chun a chinntiú go ndéanfaidh earráidí foirme an teimpléad céanna le AuthorDetailView` ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseForbidden</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FormView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.detail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SingleObjectMixin</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorInterestFormView</span><span class=\"p\">(</span><span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">FormView</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;books/author_detail.html&quot;</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">AuthorInterestForm</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseForbidden</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_success_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;author-detail&quot;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Faoi dheireadh tugaimid é seo le chéile i radharc nua <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>AuthorView`. Tá a fhios againn cheana féin go dtugann glao:meth: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.views.generic.base.view.as_view () <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>ar dhearcadh rang-bhunaithe rud dúinn a iompraíonn go díreach cosúil le dearcadh bunaithe ar fheidhm, ionas gur féidir linn é sin a dhéanamh ag an bpointe a roghnaímid idir an dá fho-radharc.</p>\n<p>Is féidir leat dul trí argóintí eochairfhocal chuig:meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.views.generic.base.view.as_view () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>ar an mbealach céanna a dhéanfá i do URLConf, amhail dá dteastaíonn uait go mbeadh an iompar <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>AuthorInterestFormView <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>le feiceáil ag URL eile ach ag baint úsáide as teimpléad difriúil:</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.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">View</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorView</span><span class=\"p\">(</span><span class=\"n\">View</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">view</span> <span class=\"o\">=</span> <span class=\"n\">AuthorDetailView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">view</span> <span class=\"o\">=</span> <span class=\"n\">AuthorInterestFormView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir an cur chuige seo a úsáid freisin le haon tuairimí cineálacha eile bunaithe ar aicme nó le do thuairimí rang-bhunaithe féin a thagann oidhreacht go díreach ó:class: View nó:class: TemplateView, toisc go gcoinníonn sé na tuairimí éagsúla chomh scartha agus is féidir.</p>\n</section>\n</section>\n<section id=\"more-than-just-html\">\n<span id=\"jsonresponsemixin-example\"></span><h2>Níos mó ná HTML amháin<a class=\"heading-anchor\" href=\"#more-than-just-html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is é an áit a bhfuil tuairimí bunaithe ar rang-bhunaithe nuair is mian leat an rud céanna a dhéanamh arís agus arís eile. Cuir i gcás go bhfuil API á scríobh agat, agus ba cheart do gach radharc JSON a thabhairt ar ais in ionad HTML rindreáilte</p>\n<p>Is féidir linn rang mixin a chruthú le húsáid inár dtuairimí go léir, ag láimhseáil an tiontú go JSON uair amháin.</p>\n<p>Mar shampla, d'fhéadfadh go mbeadh cuma mar seo ar mheascán JSON:</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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">JsonResponse</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JSONResponseMixin</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A mixin that can be used to render a JSON response.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">render_to_json_response</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns a JSON response, transforming &#39;context&#39; to make the payload.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">JsonResponse</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_data</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">),</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns an object that will be serialized as JSON by json.dumps().</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Note: This is *EXTREMELY* naive; in reality, you&#39;ll need</span>\n        <span class=\"c1\"># to do much more complex handling to ensure that arbitrary</span>\n        <span class=\"c1\"># objects -- such as Django model instances or querysets</span>\n        <span class=\"c1\"># -- can be serialized as JSON.</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Amharc ar an doiciméad:doc: /topics/sraitheoireach le haghaidh tuilleadh faisnéise maidir le conas samhlacha agus ceisteanna ceisteanna Django a athrú i gceart go JSON.</p>\n</aside>\n<p>Soláthraíonn an mixin seo modh <code class=\"docutils literal notranslate\"><span class=\"pre\">render_to_json_response</span> <span class=\"pre\">()</span> <span class=\"pre\">``leis</span> <span class=\"pre\">an</span> <span class=\"pre\">síniú</span> <span class=\"pre\">céanna</span> <span class=\"pre\">amha:func:</span> <span class=\"pre\">`~Django.Views.Generic.Base.TemplateResponseMixin.Render_to_Response</span> <span class=\"pre\">()</span> <span class=\"pre\">`.</span> <span class=\"pre\">Chun</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáid,</span> <span class=\"pre\">ní</span> <span class=\"pre\">mór</span> <span class=\"pre\">dúinn</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">mheascadh</span> <span class=\"pre\">i</span> <span class=\"pre\">``TemplateView</span></code> mar shampla, agus <code class=\"docutils literal notranslate\"><span class=\"pre\">render_to_response</span> <span class=\"pre\">()</span> <span class=\"pre\">``a</span> <span class=\"pre\">shárú</span> <span class=\"pre\">chun</span> <span class=\"pre\">`render_to_json_response</span> <span class=\"pre\">()</span></code> a ghlaoch ina ionad:</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.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateView</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JSONView</span><span class=\"p\">(</span><span class=\"n\">JSONResponseMixin</span><span class=\"p\">,</span> <span class=\"n\">TemplateView</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">render_to_response</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">render_to_json_response</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Mar an gcéanna d'fhéadfaimis ár meascán a úsáid le ceann de na tuairimí cineálacha. Is féidir linn ár leagan féin de:class: ~django.views.generic.detail.detailView a dhéanamh trí <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONResponseMixin</span></code> a mheascadh leis na:class: ~django.views.generic.detail.detail.baseDetailView -- (an: class: ~Django.Views.Generic.DetailView sula ndéantar iompar rindreála teimpléad measctha):</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.views.generic.detail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseDetailView</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JSONDetailView</span><span class=\"p\">(</span><span class=\"n\">JSONResponseMixin</span><span class=\"p\">,</span> <span class=\"n\">BaseDetailView</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">render_to_response</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">render_to_json_response</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">response_kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir an dearcadh seo a imscaradh ar an mbealach céanna le haon ain:class: ~django.views.generic.detail.detailView, leis an iompar céanna go díreach -- ach amháin i gcás formáid na freagartha.</p>\n<p>Más mian leat a bheith an-eachtraíochta, d'fhéadfá fo-aicme a:class: ~django.views.generic.detail.detailView a mheascadh atá in ann ábhar HTML agus JSON a thabhairt ar ais, ag brath ar roinnt maoin den iarratas HTTP, mar argóint fiosrúcháin nó ceannteideal HTTP. Measc sna <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONResponseMixin</span></code> agus a:class: ~Django.Views.Generic.Detail.SingleObjectTemplateResponseMixin araon, agus déan cur i bhfeidhmiú:func: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~Django.Views.Generic.Base.TemplateResponseMixin.Render_to_Response () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a chur siar go dtí an modh rindreála cuí ag brath ar an cineál freagra a d'iarr an t-úsáideoir:</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.views.generic.detail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SingleObjectTemplateResponseMixin</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">HybridDetailView</span><span class=\"p\">(</span>\n    <span class=\"n\">JSONResponseMixin</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectTemplateResponseMixin</span><span class=\"p\">,</span> <span class=\"n\">BaseDetailView</span>\n<span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">render_to_response</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Look for a &#39;format=json&#39; GET argument</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;format&quot;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;json&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">render_to_json_response</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">render_to_response</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Mar gheall ar an mbealach a réitíonn Python ró-ualú modh, críochnaíonn an glao chuig <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>super () .render_to_response (context) ag glaoch ar:meth: `~django.views.generic.base.templateResponsemixin.render_to_response () cur i bhfeidhm ar:class: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.views.generic.basixe.templateResponseMixin.Render_to_Response ()”.</p>\n</section>","rootId":"using-mixins-with-class-based-views","toc":[{"title":"Freagraí comhthéacs agus teimplé","anchor":"context-and-template-responses","children":[]},{"title":"Tuairimí cineálacha aicmbunaithe Django a thógáil","anchor":"building-up-django-s-generic-class-based-views","children":[{"title":"``DetailView ``: ag obair le réad amháin Django","anchor":"detailview-working-with-a-single-django-object","children":[]},{"title":"ListView: ag obair le go leor rudaí Django","anchor":"listview-working-with-many-django-objects","children":[]}]},{"title":"Ag baint úsáide as meascáin radharc rang-bhunaithe Django","anchor":"using-django-s-class-based-view-mixins","children":[{"title":"Ag baint úsáide as SingleObjectMixin le View","anchor":"using-singleobjectmixin-with-view","children":[]},{"title":"Ag baint úsáide as SingleObjectMixin le ``ListView ``","anchor":"using-singleobjectmixin-with-listview","children":[]}]},{"title":"Seachain aon rud níos casta","anchor":"avoid-anything-more-complex","children":[{"title":"Ag baint úsáide as FormMixin le ``DetailView ``","anchor":"using-formmixin-with-detailview","children":[]},{"title":"Réiteach níos fearr","anchor":"a-better-solution","children":[]},{"title":"Réiteach malartach níos fearr","anchor":"an-alternative-better-solution","children":[]}]},{"title":"Níos mó ná HTML amháin","anchor":"more-than-just-html","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/5.2/topics/"},{"docname":"topics/class-based-views/index","title":"Tuairimí rang-bhunaithe","url":"/ga/5.2/topics/class-based-views/"}],"prev":{"docname":"topics/class-based-views/generic-editing","title":"Láimhseáil foirme le tuairimí rangbhunaithe","url":"/ga/5.2/topics/class-based-views/generic-editing/"},"next":{"docname":"topics/migrations","title":"Imirce","url":"/ga/5.2/topics/migrations/"},"formats":{"html":"/ga/5.2/topics/class-based-views/mixins/","markdown":"/ga/5.2/topics/class-based-views/mixins.md","json":"/ga/5.2/topics/class-based-views/mixins.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/class-based-views/mixins.txt","official":"https://docs.djangoproject.com/ga/5.2/topics/class-based-views/mixins/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}