呈现表单
本课属于 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 的日期。
挑战
简单让 EventForm 自己生成表单字段。
- 在
new_event中,将一个空的EventForm作为form传给模板。 - 在
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 在线编辑器