在處理中文顯示的時候,剛開始接觸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'