Django - Widgety

Obsah
Když definujeme formulář v Django Kromě toho mu řekneme, jaký model bude mít, a pole, která by měl ukázat, můžeme mu také říci, jaké chování a jaký typ HTML bude definovat každé pole, víme, že například a CharField Mělo by nám to ukázat zadávání textového typu, ale co když chceme, aby tento textový vstup již přišel se třídou, aby se chovala podle CSS nebo je tento prvek nahrazen jiným prvkem.
Abychom toho dosáhli, máme widgety a můžeme je definovat v době vytváření třídy formuláře v naší aplikaci.
Chování HTML
Jak jsme zmínili, Django zobrazí pole formuláře v HTML kód a v závislosti na typu definovaného pole to bude prvek HTML, který se zobrazí při generování formuláře, pokud chceme v našich polích další funkce Django nám nabízí widgety aby bylo možné začlenit tyto extra funkce.
Jak je toho dosaženo?Toho je dosaženo, protože každý pole definované v Django ve formuláři má atribut widgetu a proto v okamžiku jeho instance můžeme danému atributu dát hodnotu a zajistit, aby fungoval podle toho, jak ho chceme.
Vlastní widgety
Dalším aspektem, který můžeme vzít v úvahu, je, že pokud widgety z DjangoStejně jako u typů polí je můžeme přizpůsobit, abychom dosáhli specifického chování, které odpovídá naší aplikaci.
Můžeme například vytvořit soubor typ widgetu který je integrován s a Javascriptový kalendář které jsme vyvinuli nebo které jsou konkrétně požadovány pro naši formu.
DědictvíPro vlastní widget získat očekávané základní funkce, které by měly zdědit Django.forms.widgets.Widget toto však není povinné, jakmile je zděděno z této třídy, můžeme přepsat potřebné metody k získání naší funkčnosti.
Praktická aplikace
Podívejme se níže na příklad, kde budeme generovat formulář pomocí widgety Abychom definovali některé aspekty polí, uděláme toto cvičení v interaktivní konzole Krajta:

Na obrázku pak vidíme, že v konzole jsme definovali třídu formuláře a uvnitř jsme umístili dvě pole, čímž se vyhýbáme vytváření instancí z modelu, první pole cod řekneme, že je pole IntegerField„Tímto bude v době odeslání ověřeno pouze na čísla, ale to, co nás zajímá, je druhé pole, řekneme mu, že má widget a že je formy. texturaPokud se na to podíváme, definovali jsme to jako CharField, to nám říká, že v HTML by to měl být textový vstup, nicméně s widget Změnili jsme to, když vidíme výsledný HTML, máme, že je HTML textarea.
Pokud chceme definujte pole pomocí vlastního widgetu Můžeme deklarovat třídu se vstupním typem a tu pak umístit do formuláře, podívejme se na tento kód, abychom rozuměli:
 třída PercentageInput (forms.TextInput): def render (self, name, value, attrs = None): return '% s %%'% super (PercentageInput, self) .render (name, value, attrs) 

Potom ve formě, které říkáme:
sleva = forms.IntegerField (widget = PercentageInput ())

Jak vidíme, je docela snadné přidat nové typy widgety do naší aplikace.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave