Django 表单错误占位符

Django forms error placeholder

我正在使用 Django 的 ModelForms。我的文本输入上有占位符,我希望占位符在出错时更改(以指示输入内部的错误,而不是外部的错误)。我还没有找到一种方法来覆盖小部件的模板。我怎样才能做到这一点?

class BusinessForm(ModelForm):
    color = forms.ChoiceField(choices=Business.colors)
    category = forms.ModelChoiceField(
        queryset=BusinessCategory.objects.all(),
        to_field_name='id',
        empty_label='Select Business category'
    )
    image = forms.ImageField(widget=ImageInput(), required=False)

  class Meta:
      model = Business
      fields = ['name', 'strapline', 'story', 'category', 'color',
              'address', 'secondary_address', 'city', 'county', 'postcode',
              'phone_number', 'email', 'website', 'image']
      widgets = {
        'name': forms.TextInput(attrs={'placeholder': 'Business name * Required'}),
        'strapline': forms.TextInput(attrs={'placeholder': 'Business strapline'}),
        'story': forms.Textarea(attrs={'placeholder': 'Your business story'}),
        'address': forms.TextInput(attrs={'placeholder': 'Address 1'}),
        'secondary_address': forms.TextInput(attrs={'placeholder': 'Address 2'}),
        'city': forms.TextInput(attrs={'placeholder': 'Town/City'}),
        'county': forms.TextInput(attrs={'placeholder': 'Country'}),
        #'postcode': forms.TextInput(attrs={'placeholder': 'Postcode*', 'ng-blur': 'validatePostCode()', 'ng-model': 'postcode'}),
        'postcode': forms.TextInput(attrs={'placeholder': 'Postcode * Required'}),
        'phone_number': forms.TextInput(attrs={'placeholder': 'Business phone number * Required'}),
        'email': forms.EmailInput(attrs={'placeholder': 'Business email * Required'}),
        'website': forms.TextInput(attrs={'placeholder': 'Enter business website e.g. www.mybusiness.co.uk'}),
    }
      labels = {
        'name': 'Business Name',
        'strapline': 'Business Strapline',
        'story': 'Your Business Story',
        'category': 'Select Business category',
        'address': 'Address 1',
        'secondary_address': 'Address 2',
        'city': 'Town/City',
        'county': 'Country',
        'postcode': 'Postcode*',
        'phone_number': 'Business phone number*',
        'email': 'Business email*',
        'website': 'Business Website',

    }

您可以将 attrs 字典传递给小部件,如果您使用的是常规表单呈现,将呈现这些内容:

class MyForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs={
        'placeholder': _('This is a required value')
    })

如果您希望它只在出现错误时显示,那么您可以在 clean_name 方法中设置它,尽管这通常不是您在clean_* 方法。

或者,您可以在模板中完成。查看 Django Sniplates 以获得构建 Django 模板的更好方法。

不要那样做。

仅当输入值为空白(空)时才会显示占位符。它可能适用于必需的输入,但不适用于具有值的输入。在这种情况下,占位符将消失,您无法警告用户输入错误。

这就是为什么大多数网站在输入字段旁边/上方/下方显示错误的原因。

因此,如果您仍然倾向于将错误放入空输入的占位符中,则必须使用 Javascript(例如使用 jQuery 库)。

例如,如果用户留下输入(模糊效果),您将检查是否需要输入。如果是这样并且输入为空,您会将错误放入占位符属性中。