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:
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