个性化阅读
专注于IT技术分析

Django表单

点击下载

本文概述

Django提供了一个Form类, 用于创建HTML表单。它描述了表单以及表单的工作方式和外观。

它类似于通过使用模型创建表单的ModelForm类, 但是它不需要模型。

表单类的每个字段都映射到HTML表单<input>元素, 并且每个字段本身都是一个类, 它管理表单数据并在提交表单时执行验证。

让我们看一个示例, 其中我们也创建了一些字段。

from django import forms
class 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 Form类创建HTML表单的完整示例。

在Django中建立表单

假设我们要创建一个表单来获取学生信息, 请使用以下代码。

from django import forms
class 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 render
from myapp.form import StudentForm

def 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 admin
from django.urls import path
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls), path('index/', views.index), ]

运行Server并通过localhost:8000 / index在浏览器上访问该表单, 它将产生以下输出。

Django的表单本地主机首页输出

尽管还有<label> / <input>对的其他输出选项:

  • {{form.as_table}}会将它们呈现为包裹在<tr>标记中的表格单元格
  • {{form.as_p}}会将它们包装在<p>标记中
  • {{form.as_ul}}会将它们包裹在<li>标签中

注意:我们必须自己提供周围的<table>或<ul>元素。

赞(0)
未经允许不得转载:srcmini » Django表单

评论 抢沙发

评论前必须登录!