Django - Widgety

Spisie treści
Kiedy definiujemy formę w Django Oprócz tego mówimy mu, jaki model ma przyjąć i jakie pola ma pokazywać, możemy też powiedzieć, jakie zachowanie i jakiego typu HTML ma zamiar zdefiniować każde pole, wiemy, że na przykład a CharField Powinien pokazać nam dane wejściowe typu tekstowego, ale co, jeśli chcemy, aby dane wejściowe typu tekstowego już pochodziły z klasy, aby działały według CSS lub ten element zostanie zastąpiony innym elementem.
Aby to osiągnąć, mamy widżety i możemy je zdefiniować w momencie tworzenia klasy formularza w naszej aplikacji.
Zachowanie HTML
Jak wspomnieliśmy, Django wyświetla pola formularzy w Kod HTML a do tego w zależności od typu zdefiniowanego pola będzie to element HTML, który będzie się wyświetlał podczas generowania formularza, jeśli chcemy dodatkowych funkcjonalności w naszych polach Django oferuje nam widżety aby móc włączyć te dodatkowe funkcje.
Jak to się dzieje?Dzieje się tak, ponieważ każdy pole zdefiniowane w Django w formularzu posiada atrybut widget dlatego w momencie tworzenia instancji możemy nadać wartość temu atrybutowi i sprawić, by działał zgodnie z naszymi oczekiwaniami.
Niestandardowe widżety
Innym aspektem, który możemy wziąć pod uwagę, jest to, że jeśli widżety z DjangoPodobnie jak w przypadku typów pól, możemy je dostosować, dzięki czemu możemy osiągnąć określone zachowania, które pasują do naszej aplikacji.
Na przykład możemy stworzyć typ widżetu który jest zintegrowany z Kalendarz JavaScript które opracowaliśmy lub które są specjalnie wymagane dla naszego formularza.
DziedzictwoDla niestandardowy widżet uzyskać oczekiwane podstawowe funkcjonalności powinny dziedziczyć z Django.forms.widgets.Widget jednak nie jest to obowiązkowe, gdy zostanie odziedziczone z tej klasy, możemy nadpisać niezbędne metody, aby uzyskać naszą funkcjonalność.
Praktyczne zastosowanie
Zobaczmy poniżej przykład, w którym wygenerujemy formularz za pomocą widżety Aby zdefiniować niektóre aspekty pól, zrobimy to ćwiczenie w interaktywnej konsoli programu Pyton:

Widzimy wtedy na obrazku, że w konsoli zdefiniowaliśmy klasę formularza i w środku umieściliśmy dwa pola, dzięki czemu unikamy tworzenia instancji z modelu, pierwsze pole cod mówimy, że jest polem Pole całkowite, dzięki temu będzie walidowany tylko do numerów w momencie składania, ale to co nas interesuje to drugie pole, to mówimy mu, że ma widżet i że jest to formularze.Obszar tekstowyJeśli spojrzymy na to, zdefiniowaliśmy go jako CharField, to mówi nam, że w HTML powinien to być tekst wejściowy, jednak z widget Zmieniliśmy to, kiedy widzimy wynikowy kod HTML, mamy, że jest to Obszar tekstowy HTML.
Jeśli chcemy zdefiniować pole z niestandardowym widżetem Możemy zadeklarować klasę z typem wejściowym, a następnie umieścić ją w formularzu, zobaczmy ten kod, aby zrozumieć:
 class PercentageInput (forms.TextInput): def render (self, name, value, attrs = None): return '% s %%'% super (PercentageInput, self) .render (name, value, attrs) 

Następnie w formie nazywamy to:
rabat = formularze.IntegerField (widget = PercentageInput ())

Jak widać, całkiem łatwo jest dodawać nowe typy widżety do naszej aplikacji.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave