本文概述
- 在Django中建立表单
- 在Django中实例化表单
它类似于通过使用模型创建表单的ModelForm类, 但是它不需要模型。
表单类的每个字段都映射到HTML表单< input> 元素, 并且每个字段本身都是一个类, 它管理表单数据并在提交表单时执行验证。
让我们看一个示例, 其中我们也创建了一些字段。
from django import formsclass StudentForm(forms.Form):firstname = forms.CharField(label="Enter first name", max_length=50)lastname= forms.CharField(label="Enter last name", max_length = 100)
创建的StudentForm包含两个CharField类型的字段。 Charfield是一个类, 用于创建表单中的HTML文本输入组件。
该标签用于设置组件的HTML标签, 而max_length设置输入值的长度。
呈现时, 它将向浏览器生成以下HTML。
<
label for="id_firstname">
Enter first name:<
/label>
<
input type="text" name="firstname" required maxlength="50" id="id_firstname" />
<
label for="id_lastname">
Enter last name:<
/label>
<
input type="text" name="lastname" required maxlength="100" id="id_lastname" />
注意:Django表单不包含< form> 标记或提交按钮。我们必须在模板中提供这些信息。 下表列出了常用字段及其详细信息。
Name | 类 | HTML输入 | 空值 |
---|---|---|---|
BooleanField | class BooleanField(**kwargs) | CheckboxInput | False |
CharField | 类CharField(** kwargs) | TextInput | 无论你给出的是Empty_value。 |
ChoiceField | 类ChoiceField(** kwargs) | Select | ” (空字符串) |
DateField | 类DateField(** kwargs) | DateInput | None |
DateTimeField | 类DateTimeField(** kwargs) | DateTimeInput | None |
DecimalField | 类DecimalField(** kwargs) | NumberInput | None |
EmailField | 类EmailField(** kwargs) | EmailInput | ” (空字符串) |
FileField | 类FileField(** kwargs) | ClearableFileInput | None |
ImageField | 类ImageField(** kwargs) | ClearableFileInput | None |
在Django中建立表单 假设我们要创建一个表单来获取学生信息, 请使用以下代码。
from django import formsclass StudentForm(forms.Form):firstname = forms.CharField(label="Enter first name", max_length=50)lastname= forms.CharField(label="Enter last name", max_length = 100)
将此代码放入forms.py文件。
在Django中实例化表单 现在, 我们需要在views.py文件中实例化表单。参见下面的代码。
// views.py
from django.shortcuts import renderfrom myapp.form import StudentFormdef index(request):student = StudentForm()return render(request, "index.html", {'form':student})
将表单上下文传递给索引模板, 如下所示:
// index.html
<
!DOCTYPE html>
<
html lang="en">
<
head>
<
meta charset="UTF-8">
<
title>
Index<
/title>
<
/head>
<
body>
<
form method="POST" class="post-form">
{% csrf_token %}{{ form.as_p }}<
button type="submit" class="save btn btn-default">
Save<
/button>
<
/form>
<
/body>
<
/html>
在urls.py中提供URL
from django.contrib import adminfrom django.urls import pathfrom myapp import viewsurlpatterns = [path('admin/', admin.site.urls), path('index/', views.index), ]
运行Server并通过localhost:8000 / index在浏览器上访问该表单, 它将产生以下输出。
尽管还有< label> / < input> 对的其他输出选项:
- {{form.as_table}}会将它们呈现为包裹在< tr> 标记中的表格单元格
- {{form.as_p}}会将它们包装在< p> 标记中
- {{form.as_ul}}会将它们包裹在< li> 标签中
推荐阅读
- Django安装简介
- Django表单验证
- Django文件上传
- Django的功能
- Django异常示例
- Django部署到Github
- Django管理员
- Django数据库迁移
- Django数据库连接