Django From表單定製

參考文檔:html

Forms

The Forms API

Working with forms

 

1、簡單的Form表達定製前端

1)首先咱們得定製Form表單類,下面咱們建立一個簡單的類:python

class BookForm(forms.Form):
    bookname = forms.CharField(max_length=10)
    publish_date = forms.DateField()

2)在視圖中引用:數據庫

def book(request):
    #Froms將會是一個html實例
    Froms = forms.BookForm()
    return render(request,"app01/book.html",{"bk":Froms})

3)咱們再定製模板來接收Froms的值:django

    <div class="container">
        <form class="form-horizontal" action="" method="post">

            {{ bk }}
        <input type="submit" value="commit">
        </form>
    </div>

這樣當咱們訪問指定頁面時,能看定製的Form表單:api

按F12,再查看代碼標籤,這就是Froms實例化後的html代碼:app

 

2、forms表單屬性設置:post

class BookForm(forms.Form):
    publish_id_choice = {
        (0,u'a出版社'),
        (1,u'b出版社'),
    }
    publish_id = forms.IntegerField(widget=forms.widgets.Select(choices=publish_id_choice,attrs={'class':'form-contorl'}))
    bookname = forms.CharField(max_length=10,
                               min_length=5,
                               error_messages={
                                   'required':u'書名不能爲空',
                                   'max_length':u'不能多餘10個字',
                                   'min_length':u'不能少於5個字',
                               },
                               widget=forms.TextInput(attrs={'class':'form-contorl','palceholder':u'標題很多於5字'}))
    publish_date = forms.DateField()

如上,咱們能夠設置最大最小長度,錯誤消息,自定義select,設置html標籤的class屬性值,生成的html源代碼以下:ui

 

3、ModelFormorm

根據model自動生成form表單:

def bookmodel(request):
    if request.method == 'GET':
        Form = forms.BookModelForm()
    elif request.method == 'POST':
        Form = forms.BookModelForm(request.POST)
        if Form.is_valid():
            form_data = Form.cleaned_data
            print(form_data)
            Form.save()
    return render(request,'app01/book.html',{"bk":Form})

生成的前端樣式  , HTML 取表單數據{{ bk }} :

Form.save()方法能直接保存提交的數據到數據庫。

其餘方法去表單數據:

                {% for i in bk %}
                {{ i.label_tag}}
                {{ i }}
                {% endfor %}

                <hr>

                {% for i in bk %}
                {{ i.label}}
                {{ i }}
                {% endfor %}

                <hr>

                {% for i in bk %}
                {{ i.name}}
                {{ i }}
                {% endfor %}

# 前端生成的html源代碼:

 

分別對應的前端樣式,能夠看到i.label_tag是取對應label的整個html值,i.label是取對應的label中的text值, i.name是取i的name的值,i.errors取出錯誤:

相關文章
相關標籤/搜索