Ag obair le foirmeachaLink to this heading

Mura bhfuil tú ag pleanáil láithreáin ghréasáin agus feidhmchláir a thógáil nach ndéanann aon rud ach ábhar a fhoilsiú, agus nach nglacann sé le hionchur ó do chuairteoirí, beidh ort foirmeacha a thuiscint agus a úsáid.

Soláthraíonn Django raon uirlisí agus leabharlanna chun cabhrú leat foirmeacha a thógáil chun glacadh le hionchur ó chuairteoirí an láithreáin, agus ansin an t-ionchur a phróiseáil agus

Foirmeacha HTMLLink to this heading

<form>I HTML, is bailiúchán eilimintí é foirm taobh istigh de ``...</form> ``a ligeann do chuairteoir rudaí a dhéanamh mar téacs a iontráil, roghanna a roghnú, rudaí nó rialuithe a ionramháil, agus mar sin de, agus ansin an fhaisnéis sin a sheoladh ar ais chuig an bhfreastalaí.

Tá cuid de na heilimintí comhéadain foirme seo - ionchur téacs nó boscaí seiceála - tógtha isteach i HTML féin. Tá daoine eile i bhfad níos casta; de ghnáth úsáidfidh comhéadan a chuireann roghnóir dáta suas nó a ligeann duit sleamhnán a bhogadh nó rialuithe a ionramháil JavaScript agus CSS chomh maith le heilimintí foirme HTML <input>```chun na héifeachtaí seo a bhaint amach.

Chomh maith lena eilimintí <input>```, ní mór do fhoirm dhá rud a shonrú:

  • áite: an URL ar chóir na sonraí a fhreagraíonn d'ionchur an úsáideora a thabhairt ar ais

  • how: the HTTP method the data should be returned by

Mar shampla, tá roinnt eilimintí `sa fhoirm logála isteach do riarachán Django<input>: ceann de ``type="text" don ainm úsáideora, ceann de type="password" don phasfhocal, agus ceann de type="submit" don chnaipe “Logáil isteach”. Tá roinnt réimsí téacs i bhfolach ann freisin nach bhfeiceann an t-úsáideoir, a úsáideann Django chun a chinneadh cad atá le déanamh ina dhiaidh sin.

Insíonn sé leis an mbrabhsálaí freisin gur chóir na sonraí foirme a sheoladh chuig an URL a sh <form>onraítear sa tréith ```` ```` ```` ```` - /admin/` - agus gur chóir iad a sheoladh ag baint úsáide as an meicníocht HTTP a shonraítear leis an tréith modh - post `.

Nuair a spreagtar an eilim <input type="submit" value="Log in">int `, cuirtear na sonraí ar ais chuig ``/admin/.

GET agus ``POST ``Link to this heading

Is iad GET agus `POST ``na modhanna HTTP amháin atá le húsáid agus tú ag déileáil le foirmeacha.

Cuirtear foirm logála isteach Django ar ais ag baint úsáide as an modh POST `, ina ndéanann an brabhsálaí sonraí na bhfoirme suas, iad a ionchódú lena tharchur, seolann sé chuig an bhfreastalaí, agus ansin faigheann sé a fhreagra ar ais.

I gcodarsnacht leis sin, cuireann GET` na sonraí curtha isteach i sreang, agus úsáideann sé seo chun URL a chumadh. Tá an seoladh san URL ina gcaithfear na sonraí a sheoladh, chomh maith leis na heochracha agus na luachanna sonraí. Is féidir leat é seo a fheiceáil i ngníomh má dhéanann tú cuardach sa dhoiciméadú Django, a tháirgfidh URL den fhoirm https://docs.djangoproject.com/search/?q=forms&release=1.

Is gnách go n-úsáidtear GET` agus `POST ``chun críocha éagsúla.

Ba chóir d'aon iarratas a d'fhéadfaí a úsáid chun staid an chórais a athrú - mar shampla, iarratas a dhéanann athruithe sa bhunachar sonraí - `POST ``a úsáid. Níor chóir `GET ``a úsáid ach amháin le haghaidh iarratais nach ndéanann difear do staid an chórais.

Bheadh GET ``mí-oiriúnach freisin d'fhoirm pasfhocal, toisc go mbeadh an pasfhocal le feiceáil sa URL, agus dá bhrí sin, i stair an bhrabhsálaí agus i logaí freastalaí, go léir i dtéacs simplí. Ní bheadh sé oiriúnach do chainníochtaí móra sonraí, nó do shonraí dénártha, mar shampla íomhá. Is riosca slándála é feidhmchlár gréasáin a úsáideann iarratais `GET ``ar fhoirmeacha riaracháin: is féidir go mbeadh sé éasca d'ionsaitheoir aithris a dhéanamh ar iarratas foirme chun rochtain a fháil ar chodanna íogaire den chóras. Tugann ``POST `, in éineacht le cosaintí eile cosúil le Django: Doc: `Cosaint CSRF `níos mó smachta ar rochtain </ref/csrf/>.

Ar an láimh eile, tá GET` oiriúnach do rudaí cosúil le foirm chuardaigh gréasáin, toisc gur féidir na URLanna a léiríonn iarratas GET a leabharmharcáil, a roinnt nó a athchur isteach go héasca.

Ról Django i bhfoirmeachaLink to this heading

Is gnó casta é foirmeacha láimhseála. Smaoinigh ar riarachán Django, áit a bhféadfadh go mbeadh gá go leor míreanna sonraí de roinnt cineálacha éagsúla a ullmhú le taispeáint i bhfoirm, a léiriú mar HTML, a chur in eagar ag baint úsáide as comhéadan áisiúil, filleadh ar ais chuig an bhfreastalaí, a bhailíochtú agus a ghlanadh, agus ansin a shábháil nó

Is féidir le feidhmiúlacht fhoirme Django codanna móra den obair seo a shimpliú agus a uathoibriú, agus féadann sé é a dhéanamh níos sábháilte freisin ná mar a bheadh mórchuid na ríomhchláraitheoirí in ann a dhéanamh sa chód a sc

Láimhseálann Django trí chuid ar leith den obair a bhaineann le foirmeacha:

  • sonraí a ullmhú agus a athstruchtúrú chun iad a dhéanamh réidh le rindreáil

  • foirmeacha HTML a chruthú do na sonraí

  • foirmeacha agus sonraí curtha isteach ón gcliant a fháil agus a phróiseáil

Is féidir aithe* cód a scríobh a dhéanann é seo go léir de láimh, ach is féidir le Django aire a thabhairt dó go léir duit.

Foirmeacha i DjangoLink to this heading

Tá cur síos déanta againn ar fhoirmeacha HTML go hachomair, ach níl HTML <form>```` ach cuid amháin den innealra a theastaíonn.

I gcomhthéacs iarratais gréasáin, d'fhéadfadh 'foirm' tagairt a dhéanamh don HTML sin ``<form>, nó don Django:Class: `Foirm a tháirgeann í, nó do na sonraí struchtúrtha ar ais nuair a chuirtear isteach í, nó don bhailiúchán oibre deireadh go deireadh na gcodanna seo.

An rang Django: Class: FormLink to this heading

I gcroílár an chórais comhpháirteanna seo tá rang Django's:Class: Form. Ar an mbealach céanna a dhéanann samhail Django cur síos ar struchtúr loighciúil réada, a iompar, agus an bealach a léirítear a chodanna dúinn, a: aicme: Foirm cur síos ar fhoirm agus socraíonn sé conas a oibríonn sé agus a fheictear.

Ar bhealach cosúil le réimsí rang samhail a léarscáil go réimsí bunachar sonraí, léarscáil réimsí ranga foirme chuig eilimintí foirm HTML <input>```. (A: Aicme: Mapáil ModelForm `réimsí ranga samhail chuig eilimintí foirm HTML `` <input>trí a: class: `Form; seo a bhfuil riarachán Django bunaithe air.)

Is ranganna iad réimsí foirme iad féin; bainistíonn siad sonraí foirme agus déanann siad bailíochtú nuair a chuirtear foirm isteach. A: Aicme: Láimhseálann DateField agus a:class: FileField cineálacha an-éagsúla sonraí agus caithfidh siad rudaí éagsúla a dhéanamh leis.

Léirítear réimse foirme d'úsáideoir sa bhrabhsálaí mar “giuirléid” HTML - píosa innealra comhéadan úsáideora. Tá réamhshocrú cuí ag gach cineál réimse: doc: Aicme giuirléid, ach is féidir iad seo a shárú </ref/forms/widgets/> de réir mar is gá.

Foirmeacha a thionscnamh, a phróiseáil agus a rindreáilLink to this heading

Agus réad á rindreáil i Django, is ginearálta déanaimid:

  1. faigh greim air sa radharc (faigh ón mbunachar sonraí é, mar shampla)

  2. cuir chuig comhthéacs an teimpléid é

  3. é a leathnú go marcáil HTML ag úsáid athróga teimpléad

Is éard atá i gceist le foirm a rindreáil i dteimpléad beagnach an obair chéanna le haon chineál réad eile a rindreáil, ach tá roinnt príomhdhifríochtaí ann.

I gcás samhail samhail nach raibh aon sonraí ann, is annamh a bheadh sé úsáideach riamh aon rud a dhéanamh leis i dteimpléad. Ar an láimh eile, bíonn ciall foirfe foirm neamhdhaonra a thabhairt - sin an rud a dhéanaimid nuair is mian linn go ndéanfadh an t-úsáideoir é a dhaonrú.

Mar sin nuair a láimhseálann muid samhail samhail i radharc, is gnách go mbímid é a aisghabháil ón mbunachar sonraí. Nuair a bhíonn muid ag déileáil le foirm de ghnáth déanaimid í sa radharc.

Nuair a dhéanaimid foirm a chruthú, is féidir linn a roghnú í a fhágáil folamh nó í a réamhdhíonrú, mar shampla le:

  • sonraí ó shampla samhail shábháilte (mar atá i gcás foirmeacha riaracháin le haghaidh eagarthóireachta)

  • sonraí atá curtha le chéile againn ó fhoinsí eile

  • sonraí a fuarthas ó aighneacht foirm HTML roimhe seo

Is é an ceann deireanach de na cásanna seo an ceann is suimiúla, toisc gurb é an rud a fhágann gur féidir d'úsáideoirí ní amháin láithreán gréasáin a léamh, ach faisnéis a sheoladh ar ais chuige freisin.

Foirm a thógáilLink to this heading

An obair is gá a dhéanamhLink to this heading

Cuir i gcás gur mhaith leat foirm shimplí a chruthú ar do shuíomh Gréasáin, d'fhonn ainm an úsáideora a fháil. Bheadh rud éigin mar seo ag teastáil uait i do theimpléad:

Django template
<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

Insíonn sé seo don bhrabhsálaí sonraí na bhfoirme a thabhairt ar ais chuig an URL /your-ainm/, ag baint úsáide as an modh POST ``. Taispeánfaidh réimse téacs, lipéadaithe “Do ainm:”, agus cnaipe marcáilte “OK”. athróg ``current_name sa chomhthéacs teimpléid, úsáidfear é sin chun an réimse your_name réamh-líonadh.

Beidh amharc ag teastáil uait a léiríonn an teimpléad ina bhfuil an fhoirm HTML, agus is féidir leis an réimse current_name a sholáthar de réir mar is cuí.

Nuair a chuirtear an fhoirm isteach, beidh sonraí na foirme san iarratas ``POST ``a sheoltar chuig an bhfreastalaí.

Anois beidh radharc ag teastáil uait freisin a fhreagraíonn don URL /d'ainm/ sin a gheobhaidh na péirí eochair/luacha cuí san iarratas, agus ansin iad a phróiseáil.

Is foirm an-simplí é seo. Go praiticiúil, d'fhéadfadh go mbeadh mórán nó na céadta réimsí i bhfoirm, a d'fhéadfadh go mbeadh go leor acu a réamhdhaonrú, agus b'fhéidir go bhfuilimid ag súil go n-oibreoidh an t-úsáideoir tríd an timthriall eagarthóireach-chur isteach arís agus arís eile

B'fhéidir go mbeidh roinnt bailíochtaithe ag teastáil uainn sa bhrabhsálaí, fiú sula gcuirtear an fhoirm isteach; b'fhéidir gur mhaith linn réimsí i bhfad níos casta a úsáid, a ligeann don úsáideoir rudaí a dhéanamh cosúil le dátaí a roghnú ó fhéilire agus mar sin de.

Ag an bpointe seo tá sé i bhfad níos éasca Django a fháil chun an chuid is mó den obair seo a dhéanamh dúinn.

Foirm a thógáil i DjangoLink to this heading

An rang: aicme: FoirmLink to this heading

Tá a fhios againn cheana féin cén chuma atá againn ar ár bhfoirm HTML. Is é seo an pointe tosaigh atá againn dó i Django:

foirme.py
Python
from django import forms


class NameForm(forms.Form):
    your_name = forms.CharField(label="Your name", max_length=100)

Sainmhíníonn sé seo a: aicme: Foirm aicme le réimse amháin (your_name). Chuireamar lipéad atá cairdiúil don duine i bhfeidhm ar an réimse, a bheidh le feiceáil sa <label>```nuair a rinneofar é (cé sa chás seo, is é an:attr: ~field.label a shonraíomar an ceann céanna i ndáiríre a ghinteofaí go huathoibríoch dá bhfágfaimis é).

Sainmhínítear uasfhad incheadaithe an réimse ag: attr: ~charfield.max_Length. Déanann sé seo dhá rud. Cuireann sé maxlength ="100" ar an HTML <input> (mar sin ba chóir don bhrabhsálaí cosc ar an úsáideoir níos mó ná an líon sin carachtair a iontráil sa chéad áit). Ciallaíonn sé freisin nuair a fhaigheann Django an fhoirm ar ais ón mbrabhsálaí, go ndéanfaidh sé fad na sonraí a bhailíochtú.

A: Class: Tá modh: meth: ~form.is_valid () `ag sampla `Form, a ritheann gnáthaimh bailíochtaithe dá réimsí go léir. Nuair a thugtar ar an modh seo, má tá sonraí bailí i ngach réimse, beidh sé:

  • tuairisceán True

  • cuir sonraí na foirme ina tréith: attr: ~form.Cleaned_Data.

Beidh cuma ar an bhfoirm iomlán, nuair a rindreáiltear den chéad uair, mar seo a leanas:

Django template
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100" required>

Tabhair faoi deara nach n-áirítear ion** na clibeanna <form>, nó cnaipe cuir isteach. Beidh orainn iad siúd féin a sholáthar sa teimpléad.

An radharcLink to this heading

Déantar sonraí foirme a sheoltar ar ais chuig suíomh Gréasáin Django a phróiseáil le dearcadh, de ghnáth an dearcadh céanna a d'fhoilsigh an fhoirm Ligeann sé seo dúinn cuid den loighic chéanna a athúsáid.

Chun an fhoirm a láimhseáil ní mór dúinn í a chur isteach sa radharc don URL áit ar mhaith linn go bhfoilsíodh í:

views.py
Python
from django.http import HttpResponseRedirect
from django.shortcuts import render

from .forms import NameForm


def get_name(request):
    # if this is a POST request we need to process the form data
    if request.method == "POST":
        # create a form instance and populate it with data from the request:
        form = NameForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            return HttpResponseRedirect("/thanks/")

    # if a GET (or any other method) we'll create a blank form
    else:
        form = NameForm()

    return render(request, "name.html", {"form": form})

Má thagann muid ar an radharc seo le hiarratas ``GET ``, cruthóidh sé sampla foirme folamh agus cuirfidh sé i gcomhthéacs an teimpléid atá le léiriú. Seo an rud is féidir linn a bheith ag súil go dtarlóidh an chéad uair a thugaimid cuairt ar an URL.

Má chuirtear an fhoirm isteach ag baint úsáide as iarratas POST ``, cruthóidh an dearcadh sampla foirme arís agus líonfaidh le sonraí ón iarratas: ``form = AinmForm (request.post) Tugtar “sonraí ceangailteach leis an bhfoirm” air seo (foirme*teorann* í anois).

Glaoimid modh is_valid () ``ar an bhfoirm; mura bhfuil ``True, téimid ar ais chuig an teimpléad leis an bhfoirm. An uair seo níl an fhoirm folamh a thuilleadh (untheor) mar sin déanfar na sonraí a cuireadh isteach roimhe seo sa fhoirm HTML, áit ar féidir í a chur in eagar agus a cheartú de réir mar is gá.

Más é is_valid () ```True, beidh muid in ann anois na sonraí foirme bailíochtaithe go léir a fháil ina tréith cleaned_data. Is féidir linn na sonraí seo a úsáid chun an bunachar sonraí a nuashonrú nó próiseáil eile a dhéanamh sula seolfaimid atreorú HTTP chuig an mbrabhsálaí ag insint dó cá háit a rachaidh

An teimpléadLink to this heading

Ní gá dúinn mórán a dhéanamh inár dteimpléad name.html:

Django template
<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

Déanfar réimsí uile na foirme agus a dtréithe a dhíphacáil isteach i marcáil HTML ón {{form}} sin ag teanga teimpléad Django.

<form>Tá foirm gréasáin oibre againn anois, a thuairiscítear ag Django: Class: Form, a phróiseáiltear ag radharc, agus a rindreáiltear mar HTML ```.

Sin gach rud a theastaíonn uait chun tosú, ach cuireann creat na bhfoirmeacha i bhfad níos mó ar do mhéar. Nuair a thuigeann tú buneilimintí an phróisis a thuairiscítear thuas, ba chóir duit a bheith réidh chun gnéithe eile den chóras foirmeacha a thuiscint agus réidh chun beagán níos mó a fhoghlaim faoin innealra bunúsach.

Tuilleadh faoi ranganna Django:Class: FormLink to this heading

Cruthaítear gach rang foirme mar fho-aicmí de: aicme: django.forms.form nó:class: Django.Forms.ModelForm. Is féidir leat smaoineamh ar ModelForm mar fho-aicme de Form. Tá feidhmiúlacht choiteann ag Foirm ``agus `ModelForm i ndáiríre ó rang ``BaseForm ``(príobháideach), ach is annamh a bhíonn an mionsonraí cur chun feidhme seo tábhachtach.

Cásanna foirmeacha ceangailte agus gan cheangalLink to this heading

Tá an t-idirdhealú idir: ref: ref-forms-api-bound-unbord tábhachtach:

  • Níl aon sonraí a bhaineann le foirm neamhcheangailte leis. Nuair a dhéanfar é don úsáideoir, beidh sé folamh nó beidh luachanna réamhshocraithe ann.

  • Tá sonraí curtha isteach ag foirm cheangailte, agus dá bhrí sin is féidir í a úsáid chun a rá an bhfuil na sonraí sin bailí. Má dhéantar foirm cheangailte neamhbhailí a léiriú, féadfaidh teachtaireachtaí earráide inlíne a áireamh ann ag insint don úsáideoir na sonraí

Inseoidh an tréith foirm 's:attr: ~form.is_bound duit an bhfuil sonraí ceangailte ag foirm nó nach bhfuil.

Tuilleadh ar réimsíLink to this heading

Smaoinigh ar fhoirm níos úsáideach ná ár sampla íosta thuas, a d'fhéadfaimis a úsáid chun feidhmiúlacht “déan teagmháil liom” a chur i bhfeidhm ar shuíomh Gréasáin pearsanta:

foirme.py
Python
from django import forms


class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

D'úsáid ár bhfoirm níos luaithe réimse amháin, your_name, a: class: Charfield. Sa chás seo, tá ceithre réimse ag ár bhfoirm: ábhar ``, `teachtaireacht, seoltóir ``agus ``cc_myself`. :class: Charfield, :class: emailField agus:class: BooleanField ach trí cinn de na cineálacha réimse atá ar fáil; is féidir liosta iomlán a fháil in:doc: /ref/forms/fields.

GiuirléidíLink to this heading

</ref/forms/widgets/> <input type="text">Tá comhfhreagrach ag gach réimse foirme: doc: Class giuirléid, a fhreagraíonn do ghuirléid fhoirme HTML mar ````.

I bhformhór na gcásanna, beidh giuirléid réamhshocraithe ciallmhar sa réimse <input type="text">Mar shampla, de réir réamhshocraithe, beidh a: class: textInput giuirléid ag a: class: Charfield, a tháirgeann ```` sa HTML. Más gá duit <textarea> ina ionad sin, shonrófá an giuirléid chuí agus do réimse foirme á shainiú agat, mar a rinneamar don réimse ``teachtaireacht ``.

Sonraí réimseLink to this heading

Cibé na sonraí a chuirtear isteach le foirm, nuair a bheidh siad bailíochtaithe go rathúil trí ghlaoch ar is_valid () `(agus ``is_valid ()` tar éis ``True ar ais), beidh sonraí na bhfoirme bailíochtaithe sa fhoclóir form.cleaned_data. Déanfar na sonraí seo a thiontú go deas i gcineálacha Python duit.

Sa sampla foirme teagmhála thuas, is luach boolean é cc_myself`. Mar an gcéanna, déanann réimsí mar: class: IntegerField agus:class: FloatField luachanna a thiontú go Python int` agus float faoi seach.

Seo conas a d'fhéadfaí na sonraí foirme a phróiseáil sa dearcadh a láimhseálann an fhoirm seo:

views.py
Python
from django.core.mail import send_mail

if form.is_valid():
    subject = form.cleaned_data["subject"]
    message = form.cleaned_data["message"]
    sender = form.cleaned_data["sender"]
    cc_myself = form.cleaned_data["cc_myself"]

    recipients = ["info@example.com"]
    if cc_myself:
        recipients.append(sender)

    send_mail(subject, message, sender, recipients)
    return HttpResponseRedirect("/thanks/")

Teastaíonn roinnt láimhseála breise ó roinnt cineálacha Mar shampla, ní mór comhaid a uaslódáiltear ag baint úsáide as foirm a láimhseáil ar bhealach difriúil (is féidir iad a aisghabháil ó Request.Files, seachas request.post). Le haghaidh sonraí maidir le conas uaslódálacha comhad a láimhseáil le d'fhoirm, féach:ref: binding-uploaded-files.

Ag obair le teimpléid fhoirLink to this heading

Níl le déanamh agat chun d'fhoirm a chur i dteimpléad ná an tsampla foirme a chur i gcomhthéacs an teimpléid. <label><input>Mar sin má thugtar foirm ``sa chomhthéacs ar d'fhoirm, déanfaidh {{form}} a eilimintí agus ```a ghnéithe go cuí.

Teimpléid foirme in-athLink to this heading

Gintear an t-aschur HTML agus foirm á rindreáil air féin trí theimpléad. Is féidir leat é seo a rialú trí chomhad teimpléad iomchuí a chruthú agus saincheap:setting: FORM_RENDER a shocrú chun sean:attr: ~django.forms.renderers.baserenderer.form_template_name a úsáid ar fud an láithreáin. Is féidir leat foirm a shaincheapadh freisin tríd an tréith foirm 's:attr: ~django.forms.form.template_name a shárú chun an fhoirm a léiriú ag baint úsáide as an teimpléad saincheaptha, nó trí ainm an teimpléid a chur go díreach chuig:meth: .form.render.

Mar thoradh ar an sampla thíos beidh {{form}} a rinneadh mar aschur an teimpléad form_snippet.html.

I do theimpléid:

Django template
# In your template:
{{ form }}

# In form_snippet.html:
{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

Ansin is féidir leat an socrú: setting: FORM_RENDER a chumrú:

settings.py
Python
from django.forms.renderers import TemplatesSetting


class CustomFormRenderer(TemplatesSetting):
    form_template_name = "form_snippet.html"


FORM_RENDERER = "project.settings.CustomFormRenderer"

... nó le haghaidh foirm amháin:

Code
class MyForm(forms.Form):
    template_name = "form_snippet.html"
    ...

... nó le haghaidh rindreáil aonair de shampla foirme, ag cur isteach ainm an teimpléid chuig an:meth: .form.render. Seo sampla de seo a úsáidtear i radharc:

Code
def index(request):
    form = MyForm()
    rendered_form = form.render("form_snippet.html")
    context = {"form": rendered_form}
    return render(request, "index.html", context)

Féach:ref: ref-forms-api-outputting-html le haghaidh tuilleadh sonraí.

Teimpléid grúpa allamuighLink to this heading

Tá gach réimse ar fáil mar thréith den fhoirm, ag baint úsáide as ``{{form.name_of_field}} i teimpléad. Tá modh a:meth: `~django.forms.boundfield.as_field_group ag réimse a thugann eilimintí gaolmhara an réimse mar ghrúpa, a lipéad, a ghuirléid, earráidí agus téacs cabhrach.

Ligeann sé seo teimpléid cineálacha a scríobh a shocraíonn eilimintí réimsí sa leagan amach riachtanach Mar shampla:

Django template
{{ form.non_field_errors }}
<div class="fieldWrapper">
  {{ form.subject.as_field_group }}
</div>
<div class="fieldWrapper">
  {{ form.message.as_field_group }}
</div>
<div class="fieldWrapper">
  {{ form.sender.as_field_group }}
</div>
<div class="fieldWrapper">
  {{ form.cc_myself.as_field_group }}
</div>

De réir réamhshocraithe úsáideann Django an teimpléad django/forms/field.html atá deartha le húsáid leis an stíl foirme réamhshocraithe django/forms/div.html .

Is féidir an teimpléad réamhshocraithe a shaincheapadh trí:attr: ~django.forms.renderers.baserenderer.field_template_name i do leibhéal tionscadail: setting: FORM_RENDER:

Code
from django.forms.renderers import TemplatesSetting


class CustomFormRenderer(TemplatesSetting):
    field_template_name = "field_snippet.html"

... nó ar réimse amháin:

Code
class MyForm(forms.Form):
    subject = forms.CharField(template_name="my_custom_template.html")
    ...

... nó ar bhonn in aghaidh iarratais trí ghlaoch ar :meth: .boundfield.render agus ainm teimpléad a sholáthar:

Code
def index(request):
    form = ContactForm()
    subject = form["subject"]
    context = {"subject": subject.render("my_custom_template.html")}
    return render(request, "index.html", context)

Réimsí rindreála de láimhLink to this heading

Is féidir rialú níos mó gránach ar rindreáil allamuigh a dhéanamh freisin. Is dócha go mbeidh sé seo i teimpléad réimse saincheaptha, chun ligean an teimpléad a scríobh uair amháin agus a athúsáid do gach réimse. Mar sin féin, is féidir rochtain a fháil go díreach air ón tréith allamuigh ar an bhfoirm. Mar shampla:

Django template
{{ form.non_field_errors }}
<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="{{ form.subject.id_for_label }}">Email subject:</label>
    {{ form.subject }}
</div>
<div class="fieldWrapper">
    {{ form.message.errors }}
    <label for="{{ form.message.id_for_label }}">Your message:</label>
    {{ form.message }}
</div>
<div class="fieldWrapper">
    {{ form.sender.errors }}
    <label for="{{ form.sender.id_for_label }}">Your email address:</label>
    {{ form.sender }}
</div>
<div class="fieldWrapper">
    {{ form.cc_myself.errors }}
    <label for="{{ form.cc_myself.id_for_label }}">CC yourself?</label>
    {{ form.cc_myself }}
</div>

Is féidir eilimintí iomlána <label>```a ghiniúint freisin ag baint úsáide as an: meth: ~django.forms.boundfield.label_tag. Mar shampla:

Django template
<div class="fieldWrapper">
    {{ form.subject.errors }}
    {{ form.subject.label_tag }}
    {{ form.subject }}
</div>

Teachtaireachtaí earráide foirmLink to this heading

Is é praghas na solúbthachta seo beagán níos mó oibre. Go dtí seo ní raibh orainn a bheith buartha faoi conas earráidí foirme a thaispeáint, mar tugadh aire dúinn sin. Sa sampla seo bhí orainn a chinntiú go dtugann muid aire d'aon earráidí do gach réimse agus d'aon earráidí don fhoirm ina iomláine. Tabhair faoi deara {{form.non_field_errors}} ag barr na foirme agus cuardaigh an teimpléad le haghaidh earráidí ar gach réimse.

Ag baint úsáide as {{form.name_of_field.errors}} taispeántar liosta earráidí foirme, a rinneadh mar liosta neamh-ordaithe. D'fhéadfadh sé seo a bheith cosúil le:

Django template
<ul class="errorlist">
    <li>Sender is required.</li>
</ul>

Tá aicme CSS de earrorlist ar an liosta chun ligean duit a chuma a stíleáil. Más mian leat taispeáint earráidí a shaincheapadh tuilleadh is féidir leat é sin a dhéanamh trí lúpáil orthu:

Django template
{% if form.subject.errors %}
    <ol>
    {% for error in form.subject.errors %}
        <li><strong>{{ error|escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}

Déanfar earráidí neamh-réimse (agus/nó earráidí réimse i bhfolach a rinneadh ag barr na foirme nuair a úsáidtear cúntóirí cosúil le form.as_p () `) le rang breise ``neamh-réimse` chun cabhrú leo a idirdhealú ó earráidí réimsiúla. Mar shampla, bheadh cuma ``{{form.non_field_errors}} `:

Django template
<ul class="errorlist nonfield">
    <li>Generic validation error</li>
</ul>

Féach: doc: /ref/forms/api le haghaidh tuilleadh eolais faoi earráidí, stíliú, agus oibriú le tréithe foirme i dteimpléid.

Lúpáil thar réimsí na foirmeLink to this heading

Má tá an HTML céanna á úsáid agat do gach réimse foirme, is féidir leat cód dúblach a laghdú trí lúb {% for%} a úsáid trí lúb {% for%}:

Django template
{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
        {% if field.help_text %}
          <p class="help" id="{{ field.auto_id }}_helptext">
            {{ field.help_text|safe }}
          </p>
        {% endif %}
    </div>
{% endfor %}

I measc na dtréithe úsáideacha ar {{field}} tá:

{{field.errors}}

Aschur <ul class="errorlist">```` ina bhfuil aon earráidí bailíochtaithe a fhreagraíonn don réimse seo. Is féidir leat cur i láthair na n-earráidí a shaincheapadh le lúb {% d'earráid in field.errors%}. Sa chás seo, is teaghrán é gach rud sa lúb ina bhfuil an teachtaireacht earráide.

{{field.field}}

An sampla: Class: ~django.forms.field ón rang foirm a fhilleann seo:class: ~django.forms.boundfield. Is féidir leat é a úsáid chun rochtain a fháil ar: class: ~django.forms.field tréithe, m.sh. {{char_field.field.max_length}}.

{{field.help_text}}

Aon téacs cabhrach a bhí bainteach leis an réimse.

{{field.html_name}}

Ainm an réimse a úsáidfear i réimse ainm an eilimint ionchuir. Cuireann sé seo réimír an fhoirme san áireamh, má tá sé socraithe.

{{field.id_for_label}}

An ID a úsáidfear don réimse seo (id_email sa sampla thuas). Má tá an lipéad á thógáil agat de láimh, b'fhéidir gur mhaith leat é seo a úsáid in ionad label_tag. Tá sé úsáideach freisin, mar shampla, má tá roinnt JavaScript inlíne agat agus má theastaíonn uait ID an réimse crua-chódú a sheachaint.

{{field.is_hidden}}

Is é an tréith seo True más réimse i bhfolach é an réimse foirme agus False a shlí eile. Níl sé úsáideach go háirithe mar athróg teimpléad, ach d'fhéadfadh sé a bheith úsáideach i dtástálacha coinníollach mar:

Django template
{% if field.is_hidden %}
   {# Do something special #}
{% endif %}
{{field.label}}

Lipéad an réimse, m.sh. Seoladh ríomhphoist.

{{field.label_tag}}

Lipéad an réimse fillte sa chlib HTML <label>```` cuí. Áirítear leis seo an fhoirm 's:attr: ~django.forms.form.label_suffix. Mar shampla, is é an réamhshocraithe label_suffix colon:

Django template
<label for="id_email">Email address:</label>
{{field.legend_tag}}

<label><fieldset>Cosúil le field.label_tag ach úsáideann sé clib ```` <legend>in ionad ``, le haghaidh giuirléidí le hionchuir iolracha atá fillte i ``.

{{field.use_fieldset}}

<legend>Is é an tréith seo True má tá ionchuir iolracha i ngiuirléid an réimse foirme ar chóir a ghrúpáil go séimeantach i ```` le <fieldset> chun inrochtaineacht a fheabhsú. Úsáid sampla i dteimpléad:

Django template
{% if field.use_fieldset %}
  <fieldset>
  {% if field.label %}{{ field.legend_tag }}{% endif %}
{% else %}
  {% if field.label %}{{ field.label_tag }}{% endif %}
{% endif %}
{{ field }}
{% if field.use_fieldset %}</fieldset>{% endif %}
{{field.value}}

Luach an réimse. m.sh. someone@example.com.

Lúpáil thar réimsí folaithe agus infheictheLink to this heading

Má tá foirm ag leagan amach de láimh i dteimpl <input type="hidden">éad, seachas brath ar leagan amach foirme réamhshocraithe Django, b'fhéidir gur mhaith leat réimsí ``a chóireáil go difriúil ó réimsí neamh-bhfolach. Mar shampla, toisc nach dtaispeánann réimsí i bhfolach aon rud, d'fhéadfadh teachtaireachtaí earráide a chur “in aice leis” an réimse mearbhall a bheith ina chúis le d'úsáideoirí - mar sin ba chóir earráidí do na réimsí sin a láimhseáil

Soláthraíonn Django dhá mhodh ar fhoirm a ligeann duit lúb thar na réimsí folaithe agus infheicthe go neamhspleách: hidden_fields () ``agus ``visible_fields (). Seo modhnú ar shampla níos luaithe a úsáideann an dá mhodh seo:

Django template
{# Include the hidden fields #}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{# Include the visible fields #}
{% for field in form.visible_fields %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

Ní láimhseálann an sampla seo aon earráidí sna réimsí i bhfolach. De ghnáth, is comhartha é earráid i réimse i bhfolach i gceist, ós rud é nach n-athróidh gnáthidirghníomhú foirme iad. Mar sin féin, d'fhéadfá roinnt taispeántais earráide a chur isteach go héasca do na hearráidí foirme sin, freisin.

Ábhar breiseLink to this heading

Clúdaíonn sé seo na buneilimintí, ach is féidir le foirmeacha a lán níos mó a dhéanamh: