Prenez cette forme très simple, par exemple:
class SearchForm(Form):
q = forms.CharField(label='search')
Cela est rendu dans le modèle:
<input type="text" name="q" id="id_q" />
Cependant, je veux ajouter l' placeholder
attribut à ce champ avec une valeur de Search
sorte que le HTML ressemble à quelque chose comme:
<input type="text" name="q" id="id_q" placeholder="Search" />
De préférence, je voudrais transmettre la valeur de l'espace réservé à CharField
dans la classe de formulaire via un dictionnaire ou quelque chose comme:
q = forms.CharField(label='search', placeholder='Search')
Quelle serait la meilleure façon d'y parvenir?
python
django
django-forms
Joelbitar
la source
la source
forms.TextInput
pour faire laattrs={'placeholder': 'Search'}
déclaration?Pour un ModelForm, vous pouvez utiliser la classe Meta ainsi:
la source
Les autres méthodes sont toutes bonnes. Cependant, si vous préférez ne pas spécifier le champ (par exemple pour une méthode dynamique), vous pouvez utiliser ceci:
Il permet également à l'espace réservé de dépendre de l'instance de ModelForms avec l'instance spécifiée.
la source
ModelMultipleChoiceField
. Merci!for f in MyCommentForm.base_fields.values(): f.widget.attrs["placeholder"] = f.label
mais j'aime mieux votre méthode constructeur.Vous pouvez utiliser ce code pour ajouter un attr d'espace réservé pour chaque champ TextInput de votre formulaire. Le texte des espaces réservés sera tiré des étiquettes de champ du modèle.
la source
Grande question. Je connais trois solutions:
Solution n ° 1
Remplacez le widget par défaut.
Solution n ° 2
Personnalisez le widget par défaut. Si vous utilisez le même widget que le champ utilise habituellement, vous pouvez simplement le personnaliser au lieu d'en instancier un entièrement nouveau.
Solution n ° 3
Enfin, si vous travaillez avec un formulaire modèle, vous avez la possibilité ( en plus des deux solutions précédentes ) de spécifier un widget personnalisé pour un champ en définissant l'
widgets
attribut de laMeta
classe interne .la source
self.fields
, par exemple:for field_name in self.fields: self.fields[field_name].widget.attrs.update({"placeholder": sth})
Il n'est pas souhaitable de savoir comment instancier un widget lorsque vous souhaitez simplement remplacer son espace réservé.
la source
La plupart du temps, je souhaite simplement que tous les espaces réservés soient égaux au nom détaillé du champ défini dans mes modèles
J'ai ajouté un mixin pour le faire facilement dans n'importe quelle forme que je crée,
Et
la source
Après avoir regardé votre méthode, j'ai utilisé cette méthode pour la résoudre.
la source