ModelForm添加Html样式

一,ModelForm可以帮助我们生成HTML标签。

  ```python
  class UserModelForm(forms.ModelForm):
      class Meta:
          model = models.UserInfo
          fields = ["name", "password",]
  
  form = UserModelForm()#实例化
  ```

  ```html
  {{form.name}}      普通的input框
  {{form.password}}  普通的input框
  ```

- 1,定义插件

  ```python
  class UserModelForm(forms.ModelForm):
      class Meta:
          model = models.UserInfo
          fields = ["name", "password",]
          widgets = {
              "name": forms.TextInput(attrs={"class": "form-control"}),   #一个一个加上样式
              "password": forms.PasswordInput(attrs={"class": "form-control"}),
              "age": forms.TextInput(attrs={"class": "form-control"}),
          }
  ```

```python

class UserModelForm(forms.ModelForm):
name = forms.CharField(
  min_length=3,
  label="用户名",
widget=forms.TextInput(attrs={"class": "form-control"})
)

class Meta:
model = models.UserInfo
fields = ["name", "password", "age"]
```


```html
{{form.name}} BootStrap的input框
{{form.password}} BootStrap的input框
```


- 2,重新定义的init方法,批量设置


```python
class UserModelForm(forms.ModelForm):
class Meta:
model = models.UserInfo
fields = ["name", "password", "age",]

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

# 循环ModelForm中的所有字段,给每个字段的插件设置
for name, field in self.fields.items():
field.widget.attrs = {
"class": "form-control",
"placeholder": field.label
}
```


```python
class UserModelForm(forms.ModelForm):
class Meta:
model = models.UserInfo
fields = ["name", "password", "age",]

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

# 循环ModelForm中的所有字段,给每个字段的插件设置
for name, field in self.fields.items():
# 字段中有属性,保留原来的属性,没有属性,才增加。
if field.widget.attrs:
field.widget.attrs["class"] = "form-control"
field.widget.attrs["placeholder"] = field.label
else:
field.widget.attrs = {
"class": "form-control",
"placeholder": field.label
}
```

二,自定义类

 

class BootStrapModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环ModelForm中的所有字段,给每个字段的插件设置
        for name, field in self.fields.items():
            # 字段中有属性,保留原来的属性,没有属性,才增加。
            if field.widget.attrs:
                field.widget.attrs["class"] = "form-control"
                field.widget.attrs["placeholder"] = field.label
            else:
                field.widget.attrs = {
                    "class": "form-control",
                    "placeholder": field.label
                }

 

 

 

posted @ 2022-04-12 17:18  shuqi123  阅读(35)  评论(0)    收藏  举报