Django - Widgets

Inhoudsopgave
Wanneer we een vorm definiëren in Django Afgezien daarvan vertellen we het welk model het gaat nemen en de velden die het moet tonen, we kunnen het ook vertellen welk gedrag en welk type HTML elk veld gaat definiëren, weten we dat bijvoorbeeld a CharField Het zou ons een teksttype-invoer moeten laten zien, maar wat als we willen dat die invoer van het teksttype al met een klasse komt, zodat het een gedrag heeft van CSS of dat element wordt vervangen door een ander element.
Om dit te bereiken hebben we de widgets en we kunnen ze definiëren op het moment dat de formulierklasse in onze applicatie wordt gemaakt.
HTML-gedrag
Zoals we al zeiden, Django geeft formuliervelden weer in HTML code en hiervoor zal, afhankelijk van het type veld dat is gedefinieerd, het HTML-element worden weergegeven bij het genereren van het formulier, als we extra functionaliteiten in onze velden willen Django biedt ons de widgets om deze extra functionaliteiten te kunnen inbouwen.
Hoe wordt het bereikt?Dit wordt bereikt omdat elke veld gedefinieerd in Django in een formulier heeft een widgetattribuut en daarom kunnen we op het moment dat we het maken, waarde geven aan dat attribuut en het laten werken volgens de manier waarop we het willen.
Aangepaste widgets
Een ander aspect waarmee we rekening kunnen houden, is dat als de widgets van DjangoNet als bij veldtypen kunnen we ze aanpassen, zodat we specifiek gedrag kunnen bereiken dat bij onze toepassing past.
We kunnen bijvoorbeeld een widgettype dat is geïntegreerd met een Javascript-agenda die we hebben ontwikkeld of die specifiek worden gevraagd voor ons formulier.
ErfenisVoor een aangepaste widget de verwachte basisfunctionaliteiten krijgen die moeten worden geërfd van Django.forms.widgets.Widget dit is echter niet verplicht, als het eenmaal van deze klasse is geërfd, kunnen we de noodzakelijke methoden negeren om onze functionaliteit te verkrijgen.
praktische toepassing
Laten we hieronder een voorbeeld bekijken waarin we een formulier gaan genereren met de widgets Om enkele aspecten van de velden te definiëren, gaan we deze oefening doen in de interactieve console van Python:

We zien dan in de afbeelding dat we in de console een formulierklasse hebben gedefinieerd en binnenin hebben we twee velden geplaatst, zodat we voorkomen dat we vanuit een model een instantie maken, de eerste veldcode die we vertellen dat het een veld is IntegerVeld, hiermee wordt het gevalideerd tot alleen cijfers op het moment van indienen, maar wat ons interesseert is het tweede veld, dit vertellen we dat het een widget heeft en dat het een formulieren.TekstgebiedAls we ernaar kijken, hebben we het gedefinieerd als een CharField, dit vertelt ons dat het in de HTML een tekstinvoer zou moeten zijn, maar met de widget We hebben het veranderd, als we de resulterende HTML zien, hebben we dat het een . is HTML-tekstgebied.
Als we willen definieer een veld met een aangepaste widget We kunnen een klasse declareren met een invoertype en dit dan in het formulier plaatsen, laten we deze code eens bekijken zodat we het begrijpen:
 class PercentageInput (forms.TextInput): def render (self, name, value, attrs = None): return '% s %%'% super (PercentageInput, self) .render (name, value, attrs) 

Dan in de vorm die we het noemen:
korting = formulieren.IntegerField (widget = PercentageInput ())

Zoals we kunnen zien, is het vrij eenvoudig om nieuwe soorten toe te voegen: widgets naar onze applicatie.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave