Innehållsförteckning
När vi definierar en form i Django Bortsett från det berättar vi vilken modell den kommer att ta och de fält den ska visa, vi kan också berätta vilken beteende och vilken typ av HTML kommer att definiera varje fält, vet vi att till exempel a CharField Det borde visa oss en texttypinmatning men vad händer om vi vill att den texttypsinmatningen redan kommer med en klass så att den har ett beteende av CSS eller det elementet ersätts av ett annat element.För att uppnå detta har vi widgets och vi kan definiera dem när vi gör formulärklassen i vår applikation.
HTML -beteende
Som vi nämnde, Django visar formulärfält i HTML -kod och för detta, beroende på vilken typ av fält som definieras, kommer det att vara HTML -elementet som kommer att visas när formuläret genereras, om vi vill ha ytterligare funktioner i våra fält Django erbjuder oss widgets för att kunna införliva dessa extra funktioner.
Hur uppnås det?Detta uppnås eftersom var och en fält definierat i Django i ett formulär har ett widgetattribut och därför kan vi i ögonblicket när vi instiftar det ge värde åt attributet och få det att fungera enligt det sätt vi vill ha det.
Anpassade widgets
En annan aspekt som vi kan ta hänsyn till är att om widgets av DjangoPrecis som med fälttyper kan vi anpassa dem så att vi kan uppnå specifika beteenden som passar vår applikation.
Till exempel kan vi skapa en widgettyp som är integrerad med a Javascript -kalender som vi har utvecklat eller som efterfrågas specifikt för vårt formulär.
ArvFör en anpassad widget få de förväntade grundfunktionerna ska ärva från Django.forms.widgets.Widget men detta är inte obligatoriskt, när det väl ärvt från den här klassen kan vi åsidosätta nödvändiga metoder för att få vår funktionalitet.
Praktisk applikation
Låt oss se nedan ett exempel där vi ska skapa ett formulär med hjälp av widgets För att definiera några aspekter av fälten kommer vi att göra denna övning i den interaktiva konsolen av Pytonorm:
Vi ser på bilden då att i konsolen har vi definierat en formklass och inuti har vi placerat två fält, så vi undviker att instansera från en modell, den första fälttorsken vi säger att det är ett fält IntegerField, med detta kommer det att valideras till endast siffror vid inlämningstillfället, men det som intresserar oss är det andra fältet, detta säger vi till det att det har en widget och att det är en formulär.TextareaOm vi tittar på det har vi definierat det som ett CharField, detta säger oss att det i HTML -koden ska vara en textinmatning, dock med widget Vi har ändrat det, när vi ser den resulterande HTML har vi att det är en HTML -textområde.
Om vi vill definiera ett fält med en anpassad widget Vi kan deklarera en klass med en inmatningstyp och placera den sedan i formuläret, låt oss se den här koden så att vi förstår:
class PercentageInput (forms.TextInput): def render (self, name, value, attrs = None): return '% s %%'% super (PercentageInput, self) .render (name, value, attrs)
Sedan i formen kallar vi det:
rabatt = formulär.IntegerField (widget = PercentageInput ())
Som vi kan se är det ganska enkelt att lägga till nya typer av widgets till vår ansökan.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng