Indholdsfortegnelse
Når vi definerer en form i Django Bortset fra det fortæller vi det, hvilken model det vil tage og de felter, det skal vise, vi kan også fortælle det, hvilken adfærd og hvilken type HTML vil definere hvert felt, ved vi, at f.eks CharField Det burde vise os en teksttypeindgang, men hvad nu hvis vi vil have, at teksttypen allerede kommer med en klasse, så den har en adfærd ved CSS eller det element er erstattet af et andet element.For at opnå dette har vi widgets og vi kan definere dem på tidspunktet for at lave formklassen i vores applikation.
HTML adfærd
Som vi nævnte, Django viser formularfelter i HTML -kode og til dette, afhængigt af den definerede felttype, vil det være HTML -elementet, der vises, når formularen genereres, hvis vi ønsker yderligere funktioner i vores felter Django tilbyder os widgets at kunne inkorporere disse ekstra funktioner.
Hvordan opnås det?Dette opnås, fordi hver felt defineret i Django i en formular har en widgetattribut og derfor kan vi i øjeblikket med at sætte den i gang give værdi til den nævnte attribut og få den til at fungere efter den måde, vi ønsker det.
Tilpassede widgets
Et andet aspekt, som vi kan tage højde for, er, at hvis widgets af DjangoSom med felttyper kan vi tilpasse dem, så vi kan opnå specifik adfærd, der passer til vores applikation.
For eksempel kan vi oprette en widget type der er integreret med en Javascript kalender som vi har udviklet, eller som er specifikt efterspurgt til vores formular.
ArvFor en brugerdefineret widget få de forventede grundlæggende funktionaliteter skal arve fra Django.forms.widgets.Widget men dette er ikke obligatorisk, når det først er arvet fra denne klasse, kan vi tilsidesætte de nødvendige metoder til at opnå vores funktionalitet.
Praktisk ansøgning
Lad os se et eksempel nedenfor, hvor vi skal generere en formular ved hjælp af widgets For at definere nogle aspekter af felterne skal vi lave denne øvelse i den interaktive konsol af Python:
Vi ser på billedet, at vi i konsollen har defineret en formklasse, og indeni har vi placeret to felter, så vi undgår instantiating fra en model, den første felt torsk, vi fortæller, at det er et felt HeltalFelt, med dette vil det kun blive valideret til tal på indsendelsestidspunktet, men hvad der interesserer os er det andet felt, dette fortæller vi det, at det har en widget, og at det er en former. TekstområdeHvis vi ser på det, har vi defineret det som et CharField, dette fortæller os, at det i HTML skulle være et tekstinput, dog med widget Vi har ændret det, når vi ser den resulterende HTML, har vi, at det er en HTML -tekstområde.
Hvis vi vil definere et felt med en tilpasset widget Vi kan erklære en klasse med en inputtype, og dette placeres derefter inde i formularen, lad os se denne kode, så vi forstår:
class PercentageInput (forms.TextInput): def render (self, name, value, attrs = None): return '% s %%'% super (PercentageInput, self) .render (name, value, attrs)
Så i formen kalder vi det:
discount = forms.IntegerField (widget = PercentageInput ())
Som vi kan se, er det ret let at tilføje nye typer widgets til vores ansøgning.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt