Menu
CoddyTech

呈现表单

本课属于 Coddy Django 学习旅程的“表单”单元。第 6 课,共 20 课。

/events/new/ 页面手动编写了每个标签和输入框,而 EventForm 又列出了相同的字段。表单可以自行绘制:将表单传给模板,然后在 <form> 标签中写入 {{ form }}。联系页面如下:

<form method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Send</button>
</form>

{{ form }} 会按照类中声明字段的顺序,为每个字段生成一个标签和一个输入框。每个输入框都会获得字段的 name 和类似 id_email 的 id,因此对应的标签会指向它。表单标签、令牌和按钮仍由你来编写。

尚未输入任何内容的表单,就是不带数据调用的类:ContactForm()。Django 还会用 required 标记必填输入框,因此在提交前,浏览器会阻止空字段通过。现在日期框是纯文本,因为 Django 会将 DateField 绘制为文本框。输入类似 2031-12-05 的日期。

challenge icon

挑战

简单

让 EventForm 自己生成表单字段。

  1. 在 new_event 中,将一个空的 EventForm 作为 form 传给模板。
  2. 在 new_event.html 中,用 {{ form }} 替换三个标签和输入框,让它为你生成这些内容。保留表单标签、令牌、按钮和错误消息。

添加一个日期为 2031-12-05 的活动:Django 会生成所有标签,并带你进入该活动的页面。

亲手试试

{% extends "events/base.html" %}

{% block title %}Add an event{% endblock %}

{% block content %}
<h1>Add an event</h1>
{% if error %}
<p class="error">{{ error }}</p>
{% endif %}
<form method="post">
    {% csrf_token %}
    <label for="title">Title</label>
    <input id="title" name="title">
    <label for="date">Date</label>
    <input id="date" name="date" type="date">
    <label for="place">Place</label>
    <input id="place" name="place">
    <button type="submit">Add event</button>
</form>
{% endblock %}

表单中的所有课

自己练习: Django 在线编辑器