通常情況下,我們想構建一張表單時會在模板檔案login.html中寫入
<form action="/your-name/" method="post"> <label for="your_name">Your name: </label> <input id="your_name" type="text" name="your_name" value="{{ current_name }}"> <input type="submit" value="OK"> </form>
下面說說我們在使用django是如何在模板檔案中生成form表單:
1、自定義顯示的欄位:
假如我們要在模板中生成一張含有username和content的表單
在app下新建forms.py(/users/forms.py)
from django import forms class MessageGetForm(forms.Form): username = forms.CharField(label='使用者', max_length=5) #max_length 瀏覽器限制使用者輸入的字串長度 content = forms.CharField(label='留言', max_length=100)
在檢視檔案中引用上邊表單欄位並傳遞給模板(users/view.py)
from apps.users.forms import MessageGetForm class MessageView(View): def get(self, request, *args, **kwargs): message = MessageGetForm() return render(request, "message.html", {"message": message})
在模板檔案呼叫(message.html)
<form action="" method="get"> {{ message }} </form>
渲染後的頁面效果
2、將資料表的欄位對映到模板檔案form表單
資料表courses_lesson欄位如下
在app下新建forms.py(/users/forms.py)
#此處我們假設你的專案檔案courses/models.py內含有Lesson類
from apps.courses.models import Lesson from django.forms import ModelForm class CoursesLessonForm(ModelForm): class Meta: model = Lesson fields = ['add_time', 'name', 'learn_times'] #要顯示的欄位
在檢視檔案中引用上邊表單欄位並傳遞給模板(users/view.py)
from apps.users.forms import CoursesLessonForm class MessageView(View): def get(self, request, *args, **kwargs): message = CoursesLessonForm() return render(request, "message.html", {"message": message})
在模板檔案呼叫(message.html)
<form action="" method="get"> {{ message }} </form>
頁面效果圖:
所有表單類都作為 django.forms.Form
或者 django.forms.ModelForm
的子類來建立。您可以把 ModelForm
想象成 Form
的子類。實際上 Form
和 ModelForm
從(私有) BaseForm
類繼承了通用功能,但是這個實現細節不怎麼重要。