在处理中文显示的时候,刚开始接触Django时,很容易弄混表单汉化和Admin后台汉化。
1、表单汉化:是针对用户的。用户浏览网页时,表单的名称如果是英文的,不够友好,所以需要显示为中文,虽然代码编写还是英文。
2、Admin后台汉化:是针对网站管理员的。因为Admin后台是数据库直接注册的,所以要想汉化后台内容,其实是对数据库(如字段名)操作的。2种汉化的对象不一样。
表单汉化:分2种情况
1、普通表单:即继承自fORMs.Form。这种类型的表单,中文显示主要用label属性来实现。
class ProductForm(forms.Form):
name = forms.CharField(max_length=20, label="名字",widget=forms.widgets.TextInput(
attrs={"class":"c1"}),
error_messages={'required':'名字不能为空'}
)
weight = forms.CharField(max_length=50, label='重量', validators=[weight_validate])
size = forms.CharField(max_length=50, label='尺寸')
choice_list = [(i+1, v['type_name']) for i,v in enumerate(Type.objects.values('type_name'))]
type = forms.ChoiceField(widget=forms.widgets.Select(
attrs={'class':type, 'size':'4'}
), choices=choice_list, label='产品类型')
2、数据表单:即继承自forms.ModelForm。这种类型的表单,主要通过class Meta:中的labels实现。
class ProductModeForm(forms.ModelForm):
productId = forms.CharField(max_length=20, label='产品序号') #新建字段,用label。
class Meta:
model = Product
fields = '__all__'
exclude = []
labels = { #实现字段名汉化。
'name': '产品名称',
'weight': '重量',
'size':'尺寸',
'type': '产品类型',
}
widgets = {
'name':forms.widgets.TextInput(attrs={'class':'c1'}),
}
field_classes = {
'name': forms.CharField
}
error_messages = {
'__all__': {
'required': '请输入内容',
'invalid': '请检查输入内容'
},
'weight': {
'required': '请输入重量数值',
'invalid': '请检查数值是否正确'
}
}
def clean_weight(self):
data = self.cleaned_data['weight']
return data+'g'