Возьмите эту очень простую форму, например:
class SearchForm(Form):
q = forms.CharField(label='search')
Это отображается в шаблоне:
<input type="text" name="q" id="id_q" />
Однако я хочу добавить placeholder
атрибут в это поле со значением, Search
чтобы HTML выглядел примерно так:
<input type="text" name="q" id="id_q" placeholder="Search" />
Предпочтительно, я хотел бы передать значение заполнителя в CharField
класс формы через словарь или что-то вроде:
q = forms.CharField(label='search', placeholder='Search')
Каков наилучший способ сделать это?
python
django
django-forms
Joelbitar
источник
источник
forms.TextInput
чтобы сделатьattrs={'placeholder': 'Search'}
декларацию?Для ModelForm вы можете использовать класс Meta таким образом:
источник
Все остальные методы хороши. Однако, если вы предпочитаете не указывать поле (например, для некоторого динамического метода), вы можете использовать это:
Это также позволяет заполнителю зависеть от экземпляра для ModelForms с указанным экземпляром.
источник
ModelMultipleChoiceField
. Спасибо!for f in MyCommentForm.base_fields.values(): f.widget.attrs["placeholder"] = f.label
, но мне больше нравится ваш метод конструктора.Этот код можно использовать для добавления атрибута заполнителя для каждого поля TextInput в форме. Текст для заполнителей будет взят из меток полей модели.
источник
Отличный вопрос Есть три решения, о которых я знаю:
Решение № 1
Заменить виджет по умолчанию.
Решение № 2
Настройте виджет по умолчанию. Если вы используете тот же виджет, который обычно используется в этом поле, вы можете просто настроить его вместо создания совершенно нового.
Решение № 3
Наконец, если вы работаете с формой модели, то ( в дополнение к двум предыдущим решениям ) у вас есть возможность указать собственный виджет для поля, установив
widgets
атрибут внутреннегоMeta
класса.источник
self.fields
, например:for field_name in self.fields: self.fields[field_name].widget.attrs.update({"placeholder": sth})
Нежелательно знать, как создавать экземпляр виджета, когда вы просто хотите переопределить его заполнитель.
источник
В большинстве случаев я просто хочу, чтобы все заполнители были равны подробному названию поля, определенного в моих моделях
Я добавил миксин, чтобы легко сделать это для любой формы, которую я создаю,
И
источник
Посмотрев на ваш метод, я использовал этот метод для его решения.
источник