Django形成错误占位符

时间:2016-02-07 09:50:40

标签: django django-forms

我正在使用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',

    }

2 个答案:

答案 0 :(得分:2)

您可以将attrs dict传递给窗口小部件,如果您使用常规窗体渲染,则会呈现这些:

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

如果您希望只显示错误,那么您可能可以在clean_name方法中进行此设置,尽管它通常不是您所需要的#&# 39; d见clean_*方法。

或者,您可以在模板中执行此操作。请查看Django Sniplates以获得构建django模板的更好方法。

答案 1 :(得分:2)

不要那样做。

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

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

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

例如,如果用户离开输入(模糊效果),您将检查是否需要输入。如果是,并且输入为空,则将错误放入占位符属性。