django的ModelForm及Form比较随笔

分别用ModelForm和Form显示中文

ModelForm

在model文件中创建一个表,

class UserProfile(models.Model):
    user = models.OneToOneField(User,unique=True)
    birth = models.DateField(blank=True,null=True,verbose_name='出生日期')   
    phone = models.CharField(max_length=20,null=True)

在form文件中中使用ModelForm

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('birth','phone')

如果你想在前端显示中文,有2种方式, 

1  在model中用verbose_name,然后在html中写上 profile.birth.label_tag

 2.直接写上中文
       <div class="form-group">
                <label for="{{ profile.birth.id_for_label }}" class="col-md-5 control-label">{{ profile.birth.label_tag }}</label>  # 1
                <div class="col-md-6 text-left">{{ profile.birth }}</div>
            </div>
            <div class="form-group">
                <label for="{{ profile.phone.id_for_label }}" class="col-md-5 control-label">电话号码</label>    # 2
                <div class="col-md-6 text-left">{{ profile.phone }}</div>     
            </div>

结果就是这样

Form

在form文件中写入

class LoginForm(forms.Form):
    username = forms.CharField(label='用户名',max_length=20)
    password = forms.CharField(widget=forms.PasswordInput)

在html文件中写入form.username.label_tag就能显示中文了

    <form class="form-horizontal" action="." method="post">        {% csrf_token %}
        <div class="form-group">
            <label for="{{ form.username.id_for_label }}" class="col-md-5 control-label" style="color:red"><span class="glyphicon glyphicon-user"></span>{{ form.username.label_tag }}</label>
            <div class="col-md-6 text-left">{{ form.username }}</div>
        </div>
        <div class="form-group">
            <label for="{{ form.password.id_for_label }}" class="col-md-5 control-label" style="color:red"><span class="glyphicon glyphicon-floppy-open"></span>{{ form.password.label_tag }}</label>
            <div class="col-md-6 text-left">{{ form.password }}</div>
        </div>
        <input type="submit" class="btn btn-primary btn-lg" value="登录"/>
    </form>

ps    附加一种情况:如果你的视图函数不是自己写的而是用内置的,那怎么修改成中文呢?

比如密码重置,发送邮件的时候,源码的email字段写的是英文,修改源码肯定是不好的,那就重写一个PasswordResetForm类。

url.py

from django.contrib.auth import views as auth_views
from account.forms import PasswordResetForm

urlpatterns = [ url(r'password_reset/$',auth_views.password_reset,{'password_reset_form':PasswordResetForm,'template_name':'account/password_reset_form.html',}),
]

account/forms.py   重写PasswordResetForm类。

from django.contrib.auth import forms as auth_forms
class PasswordResetForm(auth_forms.PasswordResetForm):
    email = forms.EmailField(label="邮箱", max_length=254)

那么你html中写上就能显示中文了

            <div class="form-group">
                <label class="col-md-5 control-label">{{ form.email.label_tag }}</label>
                <div class="col-md-6 text-left">{{ form.email }}</div>
            </div>

如下:


猜你喜欢

转载自blog.csdn.net/qq_34964399/article/details/80001474