Ambil formulir yang sangat sederhana ini misalnya:
class SearchForm(Form):
q = forms.CharField(label='search')
Ini akan diberikan dalam templat:
<input type="text" name="q" id="id_q" />
Namun, saya ingin menambahkan placeholder
atribut ke bidang ini dengan nilai Search
sehingga HTML akan terlihat seperti:
<input type="text" name="q" id="id_q" placeholder="Search" />
Lebih disukai saya ingin meneruskan nilai placeholder ke CharField
dalam kelas bentuk melalui kamus atau sesuatu seperti:
q = forms.CharField(label='search', placeholder='Search')
Apa cara terbaik untuk mencapai ini?
python
django
django-forms
Joelbitar
sumber
sumber
forms.TextInput
untuk melakukanattrs={'placeholder': 'Search'}
deklarasi?Untuk ModelForm, Anda bisa menggunakan kelas Meta sebagai berikut:
sumber
Metode lainnya semuanya baik. Namun, jika Anda memilih untuk tidak menentukan bidang (mis. Untuk beberapa metode dinamis), Anda dapat menggunakan ini:
Ini juga memungkinkan placeholder bergantung pada instance untuk ModelForms dengan instance yang ditentukan.
sumber
ModelMultipleChoiceField
. Terima kasih!for f in MyCommentForm.base_fields.values(): f.widget.attrs["placeholder"] = f.label
tapi saya lebih suka metode konstruktor Anda.Anda bisa menggunakan kode ini untuk menambahkan tempat penampung attr untuk setiap bidang TextInput di formulir Anda. Teks untuk penampung akan diambil dari label bidang model.
sumber
Pertanyaan yang bagus Ada tiga solusi yang saya ketahui:
Solusi # 1
Ganti widget default.
Solusi # 2
Kustomisasi widget default. Jika Anda menggunakan widget yang sama dengan yang biasa digunakan bidang tersebut, maka Anda bisa menyesuaikannya alih-alih membuat instance yang sama sekali baru.
Solusi # 3
Terakhir, jika Anda bekerja dengan formulir model maka ( selain dua solusi sebelumnya ) Anda memiliki opsi untuk menentukan widget khusus untuk bidang dengan mengatur
widgets
atributMeta
kelas dalam .sumber
self.fields
, misalnya:for field_name in self.fields: self.fields[field_name].widget.attrs.update({"placeholder": sth})
Tidak diinginkan harus tahu cara membuat instance widget saat Anda hanya ingin mengganti placeholder-nya.
sumber
Sebagian besar waktu saya hanya ingin semua placeholder sama dengan nama verbose bidang yang ditentukan dalam model saya
Saya telah menambahkan mixin untuk dengan mudah melakukan ini ke bentuk apa pun yang saya buat,
Dan
sumber
Setelah melihat metode Anda, saya menggunakan metode ini untuk menyelesaikannya.
sumber