Innholdsfortegnelse
Når vi definerer et skjema i Django Bortsett fra at vi forteller den hvilken modell den skal ta og feltene den skal vise, kan vi også fortelle den hvilken oppførsel og hvilken type HTML skal definere hvert felt, vet vi at for eksempel a CharField Det bør vise oss en teksttypeinngang, men hva om vi vil at teksttypen allerede skal ha en klasse, slik at den har en oppførsel av CSS eller at elementet er erstattet av et annet element.For å oppnå dette har vi widgets og vi kan definere dem på tidspunktet for å lage skjemaet klassen i vår søknad.
HTML -oppførsel
Som vi nevnte, Django viser skjemafelt i HTML -kode og for dette, avhengig av hvilken type felt som er definert, vil det være HTML -elementet som vil bli vist når du genererer skjemaet, hvis vi ønsker flere funksjoner i feltene våre Django tilbyr oss widgets for å kunne innlemme disse ekstra funksjonene.
Hvordan oppnås det?Dette oppnås fordi hver feltet definert i Django i et skjema har et widgetattributt og derfor kan vi i øyeblikket for å sette det i gang gi verdi til attributtet og få det til å fungere i henhold til måten vi ønsker det.
Tilpassede widgets
Et annet aspekt som vi kan ta hensyn til er at hvis widgets av DjangoSom med felttyper kan vi tilpasse dem, slik at vi kan oppnå spesifikk atferd som passer til applikasjonen vår.
For eksempel kan vi lage en widgettype som er integrert med a Javascript -kalender som vi har utviklet eller som er spesielt forespurt for skjemaet vårt.
ArvFor en tilpasset widget få de forventede grunnleggende funksjonene skal arve fra Django.forms.widgets.Widget men dette er ikke obligatorisk. Når den er arvet fra denne klassen, kan vi overstyre de nødvendige metodene for å få funksjonaliteten vår.
Praktisk anvendelse
La oss se et eksempel nedenfor der vi skal generere et skjema ved hjelp av widgets For å definere noen aspekter av feltene, skal vi gjøre denne øvelsen i den interaktive konsollen av Python:
Vi ser på bildet da at i konsollen har vi definert en formklasse og inne har vi plassert to felt, og dermed unngår vi å instantiere fra en modell, den første felttorsken vi forteller at det er et felt HeltallFelt, med dette vil det bli validert til bare tall på tidspunktet for innsending, men det som interesserer oss er det andre feltet, dette forteller vi det at det har en widget og at det er en skjemaer. TekstområdeHvis vi ser på det, har vi definert det som et CharField, dette forteller oss at det i HTML skulle være en tekstinngang, men med widget Vi har endret det, når vi ser den resulterende HTML -en, har vi at det er en HTML -tekstområde.
Hvis vi vil definere et felt med en egendefinert widget Vi kan erklære en klasse med en inndatatype, og denne plasserer den deretter inne i skjemaet, la oss se denne koden slik at 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 kaller vi det:
rabatt = formular.IntegerField (widget = Prosentinngang ())
Som vi kan se, er det ganske enkelt å legge til nye typer widgets til søknaden vår.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng