{"title":"Tuairimí cineálacha bunaithe ar rang ionsuite","version":"6.1","locale":"ga","docname":"topics/class-based-views/generic-display","url":"/ga/6.1/topics/class-based-views/generic-display/","canonical":"https://djangodocs.dev/ga/6.1/topics/class-based-views/generic-display/","summary":"Is féidir le feidhmchláir gréasáin a scríobh a bheith aontónach, toisc go ndéanaimid patrúin áirithe a athdhéanamh Déanann Django iarracht cuid den…","html":"<h1>Tuairimí cineálacha bunaithe ar rang ionsuite<a class=\"heading-anchor\" href=\"#built-in-class-based-generic-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Is féidir le feidhmchláir gréasáin a scríobh a bheith aontónach, toisc go ndéanaimid patrúin áirithe a athdhéanamh Déanann Django iarracht cuid den aonfhoirmeacht sin a thógáil ar shiúl ag na sraitheanna samhail agus teimpléad, ach bíonn forbróirí gréasáin ag an leamh seo ag an leibhéal radhairc freisin.</p>\n<p>Forbraíodh <em>tuairimí cineálacha</em> Django chun an pian sin a mhaolú. Tógann siad nathanna agus patrúin choitianta áirithe a fhaightear i bhforbairt amharc agus déanann siad teibí orthu ionas gur féidir leat tuairimí coitianta ar shonraí a scríobh go tapa gan an iomarca cód a</p>\n<p>Is féidir linn tascanna coitianta áirithe a aithint, cosúil le liosta rudaí a thaispeáint, agus cód a scríobh a thaispeánann liosta de*aon réad*. Ansin is féidir an tsamhail atá i gceist a chur ar aghaidh mar argóint bhreise chuig an URLConf.</p>\n<p>Seolann Django le tuairimí cineálacha chun na nithe seo a leanas a dhéanamh:</p>\n<ul class=\"simple\">\n<li><p>Taispeáin liosta agus leathanaigh mionsonraithe le haghaidh réad amháin. Dá mbeimid ag cruthú feidhmchlár chun comhdhálacha a bhainistiú ansin bheadh TalkListView agus <code class=\"docutils literal notranslate\">RegisteredUserListView</code> ina samplaí de thuairimí liosta. Is sampla é leathanach cainte amháin den rud a thugaimid ar radharc “mionsonraí”.</p></li>\n<li><p>Cuir rudaí dáta-bhunaithe i láthair i leathanaigh cartlainne blian/mí/lá, mionsonraí gaolmhara, agus leathanaigh “is déanaí”.</p></li>\n<li><p>Lig d'úsáideoirí rudaí a chruthú, a nuashonrú agus a scriosadh - le húdarú nó gan údarú.</p></li>\n</ul>\n<p>Le chéile, soláthraíonn na tuairimí seo comhéadain chun na tascanna is coitianta a thagann forbróirí a dhéanamh</p>\n<section id=\"extending-generic-views\">\n<h2>Tuairimí cineálacha a le<a class=\"heading-anchor\" href=\"#extending-generic-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Níl aon cheist ann gur féidir le tuairimí cineálacha a úsáid a bhrostú go suntasach. I bhformhór na dtionscadail, áfach, tagann nóiméad nuair nach leor na tuairimí cineálacha a thuilleadh. Go deimhin, is í an cheist is coitianta a chuireann forbróirí nua Django ná conas tuairimí cineálacha a láimhseáil le raon níos leithne cásanna.</p>\n<p>Seo ceann de na cúiseanna a athdhearadh tuairimí cineálacha don scaoileadh 1.3 - roimhe seo, bhí feidhmeanna amharc acu le sraith roghanna mealltach; anois, seachas cuid mhór cumraíochta a chur isteach sa URLConf, is é an bealach molta chun tuairimí cineálacha a leathnú ná iad a fho-aicmiú, agus a gcuid tréithe nó modhanna a shárú.</p>\n<p>É sin ráite, beidh teorainn ag tuairimí cineálacha. Má aimsíonn tú go bhfuil tú ag streachailt do dhearcadh a chur i bhfeidhm mar fho-aicme de radharc cineálach, ansin b'fhéidir go mbeidh sé níos éifeachtaí duit ach an cód a theastaíonn uait a scríobh, ag baint úsáide as do thuairimí rang-bhunaithe nó feidhmiúla féin.</p>\n<p>Tá níos mó samplaí de thuairimí cineálacha ar fáil i roinnt feidhmchlár tríú páirtí, nó d'fhéadfá do chuid féin a scríobh de réir mar is gá.</p>\n</section>\n<section id=\"generic-views-of-objects\">\n<h2>Tuairimí cineálacha ar rudaí<a class=\"heading-anchor\" href=\"#generic-views-of-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ga/6.1/ref/class-based-views/base/#django.views.generic.base.TemplateView\" title=\"django.views.generic.base.TemplateView\"><code class=\"xref py py-class docutils literal notranslate\">TemplateView</code></a> certainly is useful, but\nDjango's generic views really shine when it comes to presenting views of your\ndatabase content. Because it's such a common task, Django comes with a handful\nof built-in generic views to help generate list and detail views of objects.</p>\n<p>Tosaímid trí fhéachaint ar roinnt samplaí de liosta rudaí nó réad aonair a thaispeáint.</p>\n<p>Beidh muid ag baint úsáide as na samhlacha 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\"># models.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Publisher</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    address <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    city <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n    state_province <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    country <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    website <span class=\"o\">=</span> models<span class=\"o\">.</span>URLField<span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;-name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</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>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    salutation <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    email <span class=\"o\">=</span> models<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n    headshot <span class=\"o\">=</span> models<span class=\"o\">.</span>ImageField<span class=\"p\">(</span>upload_to<span class=\"o\">=</span><span class=\"s2\">&quot;author_headshots&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</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>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    authors <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">)</span>\n    publisher <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Publisher<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    publication_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n</code></pre></div>\n<p>Anois ní mór dúinn dearcadh a shainiú:</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\"># views.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> ListView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Publisher\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherListView</span><span class=\"p\">(</span>ListView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Publisher\n</code></pre></div>\n<p>Ar deireadh, cuir an radharc sin isteach i do urls:</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\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">books.views</span> <span class=\"kn\">import</span> PublisherListView\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;publishers/&quot;</span><span class=\"p\">,</span> PublisherListView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Sin an cód Python go léir a chaithfimid a scríobh. Ní mór dúinn teimpléad a scríobh fós, áfach. D'fhéadfaimis a insint go sainráite don radharc cén teimpléad atá le húsáid trí thréith <code class=\"docutils literal notranslate\">template_name</code> a chur leis an radharc, ach in éagmais teimpléad follasach tabharfaidh Django amach ceann ó ainm an réada. Sa chás seo, is é <code class=\"docutils literal notranslate\">” books/publisher_list.html “</code> an teimpléad intuartha - tagann an chuid “leabhair” ó ainm an aip a shainmhíníonn an tsamhail, agus is é an giotán “foilsitheora” an leagan íseal d'ainm an tsamhail.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Dá bhrí sin, nuair a shocraítear (mar shampla) an rogha <code class=\"docutils literal notranslate\">APP_DIRS</code> de chúltaca <code class=\"docutils literal notranslate\">DjangoTemplates</code> go Fíor in:setting: TEMPLATES, d'fhéadfadh suíomh teimpléad a bheith: /path/to/project/books/templates/books/publisher_list.html</p>\n</aside>\n<p>Déanfar an teimpléad seo a léiriú i gcoinne comhthéacs ina bhfuil athróg ar a dtugtar object_list` ina bhfuil na rudaí foilsitheora go léir. D'fhéadfadh cuma seo a bheith ar theimpléad:</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>Publishers<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">publisher</span> <span class=\"k\">in</span> <span class=\"nv\">object_list</span> <span class=\"cp\">%}</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">publisher.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Sin go léir atá ann i ndáiríre. Tagann gnéithe fionnuar uile na tuairimí cineálacha ó na tréithe atá leagtha amach ar an radharc cineálach a athrú. Déan:doc: tagairt tuairimí cineálacha '&lt;/ref/class-based-views/index&gt; doiciméadaíonn na tuairimí cineálacha go léir agus a roghanna go mion; breithneoidh an chuid eile den doiciméad seo cuid de na bealaí coitianta a d'fhéadfá tuairimí cineálacha a shaincheapadh agus a leathnú.</p>\n<section id=\"making-friendly-template-contexts\">\n<h3>Comhthéacsanna teimpléid “cairdiúla”<a class=\"heading-anchor\" href=\"#making-friendly-template-contexts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>B'fhéidir gur thug tú faoi deara go stórálann ár dteimpléad liosta foilsitheoirí samplach na foilsitheoirí go léir in athróg darb ainm object_list`. Cé go n-oibríonn sé seo go breá, níl sé chomh “cairdiúil” sin d'údair teimpléid: caithfidh siad “a fhios” a bheith acu go bhfuil siad ag déileáil le foilsitheoirí anseo.</p>\n<p>Bhuel, má tá tú ag déileáil le réad samhail, déantar é seo duit cheana féin. Nuair a bhíonn tú ag déileáil le réad nó tacar fiosrúcháin, tá Django in ann an comhthéacs a líonadh ag baint úsáide as an leagan íseal d'ainm an ranga samhail. Cuirtear é seo ar fáil i dteannta leis an iontráil réamhshocraithe <code class=\"docutils literal notranslate\">object_list</code>, ach tá na sonraí céanna go díreach ann, ie <code class=\"docutils literal notranslate\">publisher_list</code>.</p>\n<p>Mura meaitseáil mhaith é seo fós, is féidir leat ainm an athróg comhthéacs a shocrú de láimh. Sonraíonn an tréith <code class=\"docutils literal notranslate\">context_object_name</code> ar amharc cineálach an t-athróg comhthéacs atá le húsáid:</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\"># views.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> ListView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Publisher\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherListView</span><span class=\"p\">(</span>ListView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Publisher\n    context_object_name <span class=\"o\">=</span> <span class=\"s2\">&quot;my_favorite_publishers&quot;</span>\n</code></pre></div>\n<p>Is smaoineamh maith i gcónaí é <code class=\"docutils literal notranslate\">context_object_name</code> úsáideach a sholáthar. Gabhfaidh do chomhoibrithe a dhearann teimpléid buíochas leat.</p>\n</section>\n<section id=\"adding-extra-context\">\n<span id=\"id1\"></span><h3>Comhthéacs breise leis<a class=\"heading-anchor\" href=\"#adding-extra-context\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Go minic ní mór duit roinnt faisnéise breise a chur i láthair seachas an rud a sholáthraíonn an dearcadh cineálach. Mar shampla, smaoinigh ar liosta de na leabhair go léir a thaispeáint ar leathanach mionsonraí gach foilsitheora. Soláthraíonn amharc cineálach: Class: ~django.views.generic.detail.detailView don fhoilsitheoir don chomhthéacs, ach conas a gheobhaidh muid faisnéis bhreise sa teimpléad sin?</p>\n<p>Is é an freagra ar subclass:class: ~django.views.generic.detail.detailView agus cuir do chur i bhfeidhm féin ar an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_context_data <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a sholáthar. Cuireann an cur i bhfeidhm réamhshocraithe an réad atá á thaispeáint leis an teimpléad, ach is féidir leat é a shárú chun níos mó a sheoladh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> DetailView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Book<span class=\"p\">,</span> Publisher\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherDetailView</span><span class=\"p\">(</span>DetailView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Publisher\n\n    <span class=\"k\">def</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>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        context <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_context_data<span class=\"p\">(</span><span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n        <span class=\"c1\"># Add in a QuerySet of all the books</span>\n        context<span class=\"p\">[</span><span class=\"s2\">&quot;book_list&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n        <span class=\"k\">return</span> context\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Go ginearálta, cumasóidh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_context_data <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>sonraí comhthéacs gach rang tuismitheora le sonraí an ranga reatha. Chun an t-iompar seo a chaomhnú i do ranganna féin inar mian leat an comhthéacs a athrú, ba cheart duit a bheith cinnte glaoch ar <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>get_context_data <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>ar an sár-rang. Nuair nach ndéanann dhá rang iarracht an eochair chéanna a shainiú, tabharfaidh sé seo na torthaí a bhfuil súil leo. Mar sin féin má dhéanann aon rang iarracht eochair a shárú tar éis do ranganna tuismitheoirí é a shocrú (tar éis an glao ar an sár-scoth), beidh ar aon pháistí den rang sin é a shocrú go sainráite i ndiaidh an super más mian leo a bheith cinnte go gcuirfidh siad gach tuismitheoir a shárú. Má tá trioblóid agat, déan athbhreithniú ar ord réitigh modh do dhearcadh.</p>\n<p>Breithniú eile is ea go gcuirfidh na sonraí comhthéacs ó thuairimí cineálacha aicmbunaithe ar shárú sonraí a sholáthraíonn próiseálaithe comhthéacs; féach:meth: ~django.views.generic.detail.singleObjectMixin.get_context_data mar shampla.</p>\n</aside>\n</section>\n<section id=\"viewing-subsets-of-objects\">\n<span id=\"generic-views-list-subsets\"></span><h3>Ag féachaint ar fhothacair rudaí<a class=\"heading-anchor\" href=\"#viewing-subsets-of-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Anois déanaimis breathnú níos dlúithe ar an argóint <code class=\"docutils literal notranslate\">samhail ``a bhí á úsáid againn ar fad. Tá an argóint ``samhail ``, a shonraíonn an tsamhail bunachar sonraí ar a oibreoidh an dearcadh air, ar fáil ar na tuairimí cineálacha go léir a oibríonn ar réad amháin nó ar bhailiúchán rudaí. Mar sin féin, ní hé an argóint ``samhail ``an t-aon bhealach chun na rudaí a oibreoidh an dearcadh orthu a shonrú - is féidir leat liosta na rudaí a shonrú ag baint úsáide as an argóint ``Queryset</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> DetailView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Publisher\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherDetailView</span><span class=\"p\">(</span>DetailView<span class=\"p\">):</span>\n    context_object_name <span class=\"o\">=</span> <span class=\"s2\">&quot;publisher&quot;</span>\n    queryset <span class=\"o\">=</span> Publisher<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n</code></pre></div>\n<p>Is gearrthéacs é <code class=\"docutils literal notranslate\">model = Foilsitheoir ``a shonrú chun ``queryset = Publisher.Objects.all ()</code> a rá. Mar sin féin, trí úsáid a bhaint as <code class=\"docutils literal notranslate\">queryset</code> chun liosta scagtha rudaí a shainiú is féidir leat a bheith níos sainiúla faoi na rudaí a bheidh le feiceáil sa radharc (féach: Doc: /topics/db/queries le haghaidh tuilleadh faisnéise fao:class: ~django.db.models.queryset rudaí, agus féach an tagair:doc: rang-bhunaithe tuairim le haghaidh na &lt;/ref/class-based-views/index&gt; sonraí iomlána).</p>\n<p>Chun sampla a roghnú, b'fhéidir gur mhaith linn liosta leabhair a ordú de réir dáta foilsithe, agus an chéad cheann is déanaí:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> ListView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Book\n\n\n<span class=\"k\">class</span> <span class=\"nc\">BookListView</span><span class=\"p\">(</span>ListView<span class=\"p\">):</span>\n    queryset <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;-publication_date&quot;</span><span class=\"p\">)</span>\n    context_object_name <span class=\"o\">=</span> <span class=\"s2\">&quot;book_list&quot;</span>\n</code></pre></div>\n<p>Is sampla beag go leor é sin, ach léiríonn sé an smaoineamh go deas. De ghnáth beidh tú ag iarraidh níos mó a dhéanamh ná rudaí a athordú amháin. Más mian leat liosta leabhair ag foilsitheoir áirithe a chur i láthair, is féidir leat an teicníc chéanna a úsáid:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> ListView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Book\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AcmeBookListView</span><span class=\"p\">(</span>ListView<span class=\"p\">):</span>\n    context_object_name <span class=\"o\">=</span> <span class=\"s2\">&quot;book_list&quot;</span>\n    queryset <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>publisher__name<span class=\"o\">=</span><span class=\"s2\">&quot;ACME Publishing&quot;</span><span class=\"p\">)</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;books/acme_list.html&quot;</span>\n</code></pre></div>\n<p>Tabhair faoi deara go bhfuilimid ag úsáid ainm teimpléad saincheaptha in éineacht le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>queryset <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>scagtha. Mura ndéanfaimis, úsáidfeadh an dearcadh cineálach an teimpléad céanna leis an liosta réada “vanilla”, rud b'fhéidir nach é an rud a theastaíonn uainn.</p>\n<p>Tabhair faoi deara freisin nach bealach an-galánta é seo chun leabhair a bhaineann go sonrach don fhoilsitheoir a dhéanamh. Más mian linn leathanach foilsitheora eile a chur leis, bheadh dornán línte eile ag teastáil uainn sa URLConf, agus bheadh níos mó ná cúpla foilsitheoir míréasúnach. Déileálfaimid leis an bhfadhb seo sa chéad chuid eile.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>If you get a 404 when requesting <code class=\"docutils literal notranslate\">/books/acme/</code>, check to ensure you\nactually have a Publisher with the name 'ACME Publishing'. Generic\nviews have an <code class=\"docutils literal notranslate\">allow_empty</code> parameter for this case. See the\n<a class=\"reference internal\" href=\"/ga/6.1/ref/class-based-views/\"><span class=\"doc\">class-based-views reference</span></a> for more\ndetails.</p>\n</aside>\n</section>\n<section id=\"dynamic-filtering\">\n<h3>Scagadh dinimiciúil<a class=\"heading-anchor\" href=\"#dynamic-filtering\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Another common need is to filter down the objects given in a list page by some\nkey in the URL. Earlier we hardcoded the publisher's name in the URLconf, but\nwhat if we wanted to write a view that displayed all the books by some\narbitrary publisher?</p>\n<p>Go háirithe, tá a: meth: ~django.views.generic.list.multipleObjectMixin.get_querySet modh is féidir linn a shárú. De réir réamhshocraithe, filleann sé luach an tréith <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>queryset <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, ach is féidir linn é a úsáid chun níos mó loighic a chur leis.</p>\n<p>Is é an phríomhchuid chun an obair seo a dhéanamh ná go stóráiltear rudaí úsáideacha éagsúla ar féin nuair a thugtar tuairimí rang-bhunaithe; chomh maith leis an iarratas (self.request`) san áireamh seo argóintí seasmhacha (self.args`) agus ainmbunaithe (self.kwargs`) a ghabhadh de réir an URLConf.</p>\n<p>Anseo, tá URLConf againn le grúpa gabhadh amháin:</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\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">books.views</span> <span class=\"kn\">import</span> PublisherBookListView\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;books/&lt;publisher&gt;/&quot;</span><span class=\"p\">,</span> PublisherBookListView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ansin, scríobhfaimid an radharc <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>PublisherBookListView <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>féin:</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\"># views.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> get_object_or_404\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> ListView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Book<span class=\"p\">,</span> Publisher\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherBookListView</span><span class=\"p\">(</span>ListView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;books/books_by_publisher.html&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>publisher <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>Publisher<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;publisher&quot;</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>publisher<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>publisher<span class=\"p\">)</span>\n</code></pre></div>\n<p>Tá úsáid a bhaint as <code class=\"docutils literal notranslate\">get_queryset</code> chun loighic a chur leis an roghnú cueryset chomh áisiúil agus atá sé cumhachtach. Mar shampla, dá dteastaíonn uainn, d'fhéadfaimis <code class=\"docutils literal notranslate\">self.request.user</code> a úsáid chun scagadh ag baint úsáide as an úsáideoir reatha, nó loighic níos casta eile.</p>\n<p>Is féidir linn an foilsitheoir a chur isteach sa chomhthéacs ag an am céanna, ionas gur féidir linn é a úsáid sa teimpléad:</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\"># ...</span>\n\n\n<span class=\"k\">def</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>kwargs<span class=\"p\">):</span>\n    <span class=\"c1\"># Call the base implementation first to get a context</span>\n    context <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_context_data<span class=\"p\">(</span><span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n    <span class=\"c1\"># Add in the publisher</span>\n    context<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>publisher\n    <span class=\"k\">return</span> context\n</code></pre></div>\n</section>\n<section id=\"performing-extra-work\">\n<span id=\"generic-views-extra-work\"></span><h3>Obair bhreise a dhéanamh<a class=\"heading-anchor\" href=\"#performing-extra-work\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is éard atá i gceist leis an bpatrún coitianta deireanach a bhreathnóimid air roinnt oibre breise a dhéanamh roimh nó tar éis glaoch ar an dear</p>\n<p>Samhlaigh go raibh réimse <code class=\"docutils literal notranslate\">las_accessed</code> againn ar ár samhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Author <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a bhí á úsáid againn chun súil a choinneáil ar an uair dheireanach a d'fhéach duine ar bith ar an údar sin:</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\"># models.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    salutation <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    email <span class=\"o\">=</span> models<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n    headshot <span class=\"o\">=</span> models<span class=\"o\">.</span>ImageField<span class=\"p\">(</span>upload_to<span class=\"o\">=</span><span class=\"s2\">&quot;author_headshots&quot;</span><span class=\"p\">)</span>\n    last_accessed <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n</code></pre></div>\n<p>Ní bheadh aon rud ar eolas ag an rang cineálach <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DetailView <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>faoin réimse seo, ach arís d'fhéadfaimis dearcadh saincheaptha a scríobh chun an réimse sin a choinneáil nuashonraithe.</p>\n<p>Ar dtús, bheadh orainn giotán mionsonraithe údair a chur leis sa URLConf chun dearcadh saincheaptha a chur in iúl:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">books.views</span> <span class=\"kn\">import</span> AuthorDetailView\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;authors/&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> AuthorDetailView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;author-detail&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ansin scríobhfaimis ár dtuairim nua - is é <code class=\"docutils literal notranslate\">get_object</code> an modh a aisghabhann an réad - mar sin déanaimid é a shárú agus fillteann muid an glao:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> DetailView\n<span class=\"kn\">from</span> <span class=\"nn\">books.models</span> <span class=\"kn\">import</span> Author\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorDetailView</span><span class=\"p\">(</span>DetailView<span class=\"p\">):</span>\n    queryset <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        obj <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_object<span class=\"p\">()</span>\n        <span class=\"c1\"># Record the last accessed date</span>\n        obj<span class=\"o\">.</span>last_accessed <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span>\n        obj<span class=\"o\">.</span>save<span class=\"p\">()</span>\n        <span class=\"k\">return</span> obj\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Úsáideann an URLConf anseo an grúpa ainmnithe pk` - is é an t-ainm seo an t-ainm réamhshocraithe a úsáideann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>DetailView` chun luach an phríomh-eochair a úsáidtear chun an tacar fiosrúcháin a scagadh a aimsiú.</p>\n<p>Más mian leat rud éigin eile a ghlaoch ar an ngrúpa, is féidir leat: attr: ~django.views.generic.detail.singleObjectMixin.pk_URL_kwarg a shocrú ar an radharc.</p>\n</aside>\n</section>\n</section>","rootId":"built-in-class-based-generic-views","toc":[{"title":"Tuairimí cineálacha a le","anchor":"extending-generic-views","children":[]},{"title":"Tuairimí cineálacha ar rudaí","anchor":"generic-views-of-objects","children":[{"title":"Comhthéacsanna teimpléid “cairdiúla”","anchor":"making-friendly-template-contexts","children":[]},{"title":"Comhthéacs breise leis","anchor":"adding-extra-context","children":[]},{"title":"Ag féachaint ar fhothacair rudaí","anchor":"viewing-subsets-of-objects","children":[]},{"title":"Scagadh dinimiciúil","anchor":"dynamic-filtering","children":[]},{"title":"Obair bhreise a dhéanamh","anchor":"performing-extra-work","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.1/topics/"},{"docname":"topics/class-based-views/index","title":"Tuairimí rang-bhunaithe","url":"/ga/6.1/topics/class-based-views/"}],"prev":{"docname":"topics/class-based-views/intro","title":"Réamhrá ar thuairimí rangbhunaithe","url":"/ga/6.1/topics/class-based-views/intro/"},"next":{"docname":"topics/class-based-views/generic-editing","title":"Láimhseáil foirme le tuairimí rangbhunaithe","url":"/ga/6.1/topics/class-based-views/generic-editing/"},"formats":{"html":"/ga/6.1/topics/class-based-views/generic-display/","markdown":"/ga/6.1/topics/class-based-views/generic-display.md","json":"/ga/6.1/topics/class-based-views/generic-display.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/class-based-views/generic-display.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/class-based-views/generic-display/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}