[Python] Как добавить местозаполнитель в CharField в Django?



Answers

Для ModelForm вы можете использовать класс Meta, таким образом:

from django import forms

from .models import MyModel

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'name': forms.TextInput(attrs={'placeholder': 'Name'}),
            'description': forms.Textarea(
                attrs={'placeholder': 'Enter description here'}),
        }
Question

Возьмите эту очень простую форму, например.

class SearchForm(Form):
   q = forms.CharField(label='search')

Это получается в шаблоне:

<input type="text" name="q" id="id_q" />

Тем не менее, я хочу добавить атрибут «placeholder» в это поле со значением «Поиск», чтобы HTML выглядел примерно так:

<input type="text" name="q" id="id_q" placeholder="Search" />

Предпочтительно, я хотел бы передать значение placeholder в CharField в классе формы через словарь или что-то вроде:

q = forms.CharField(label='search', placeholder='Search')

Какой был бы лучший способ сделать это?




Вы можете использовать этот код, чтобы добавить placeholder attr для каждого поля TextInput в вашей форме. Текст для заполнителей будет снят с полей модели.

class PlaceholderDemoForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PlaceholderDemoForm, self).__init__(*args, **kwargs)
        for field_name in self.fields:
            field = self.fields.get(field_name)  
            if field:
                if type(field.widget) in (forms.TextInput, forms.DateInput):
                    field.widget = forms.TextInput(attrs={'placeholder': field.label})

    class Meta:
        model = DemoModel





Links