Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第八章:django表单 > 8.4节: django表单进阶用法

8.4节: django表单进阶用法

薯条老师 2020-09-25 07:54:23 233149 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

8.4.1 在模板中渲染表单

django表单在模板中渲染时,默认是以HTML的Form表单来进行渲染。8.2节中的RegisterFrom为例:

<tr>
    <th><label for="id_account">输入您的账号:</label></th>
    <td><input type="text" name="account" maxlength="20" required id="id_account"></td>
</tr>
 
<tr>
    <th><label for="id_password1">输入登录密:</label></th>
    <td><input type="password" name="password1" maxlength="20" required id="id_password1"> </td>
</tr>
 
<tr>
    <th><label for="id_password2">再次输入密:</label></th>
    <td><input type="password" name="password2" maxlength="20" required id="id_password2"></td>
</tr>

渲染后的表单不会包含<table>标签,需要我们自行在模板中进行定义。django表单的输出选项:

(1) {{ form.as_table }}:HTML表格的形式进行渲染,但不会添加table标签。

(2) {{ form.as_p }}:HTML的<p>标签来进行渲染

(3) {{form.as_ul}}:HTML的<tr>标签来进行渲染,但不会添加<ul>标签。

RegisterForm实例改为{{ register_form.as_p }}进行输出:

<p>
    <label for="id_account">输入您的账号:</label>
    <input type="text" name="account" maxlength="20" required id="id_account">
</p>
 
<p>
    <label for="id_password1">输入登录密:</label>
    <input type="password" name="password1" maxlength="20" required id="id_password1"> 
</p>
 
<p>
    <label for="id_password2">再次输入密:</label>
    <input type="password" name="password2" maxlength="20" required id="id_password2">
</p>

8.4.2 手动渲染表单字段

(1) 表单字段的常用属性

在手动对表单进行渲染时,可以通过field.attribute的语法来获取字段的属性值,field表示表单的字段名。

属性名

描述

label

字段的label值。

 

label_tag

通过该属性,可以渲染一个完整的label标签

id_for_label

字段的ID值,通常用于label标签中。

value

字段的输入

html_name

字段名称,用于其输入元素的name属性中,如果设置了表单前缀,它也会被加进去。

help_text

字段的描述性文本

is_hidden

指示该字段是否为隐藏域

django在对表单进行渲染,其实质是将表单的字段解包,再逐一渲染。在必要情况下,我们可以手动进行渲染,字段值直接通过{{ form.name_of_field }}的形式进行获取,name_of_field表示表单中的字段名。每个表单字段都有一个形如id_<field-name> 的ID属性,它被label标签引用,在手动进行渲染时,该ID值可以通过{{ form.field.id_for_label }}的形式进行获取。手动对RegisterForm进行渲染:

<div>
    <label for="{{ register_form.account.id_for_label }}">账号:</label>
    {{register_form.account}}
</div>
 
<div>
    <label for="{{ register_form.password1.id_for_label }}">账号:</label>
    {{register_form.password1}}
</div>
 
<div>
    <label for="{{ register_form.password2.id_for_label }}">账号:</label>
    {{register_form.password2}}
</div>

完整的 <label> 元素还可以使用 label_tag() 来生成。例如:

<div>
    {{ register_form.account.label_tag }}
    {{ register_form.account }}
</div>

(2) 渲染表单的错误信息

表单字段值在验证失败时,通过字段中的errors属性,可以获取表单的错误信息。errors属性保存了所有的验证错误信息,在手动进行渲染时,可以对错误信息进行遍历:

{% if register_form.account.errors %}
    <ol>
    {% for error in register_form.account.errors %}
        <li><strong>{{ error | escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}

模板标签{{ form.non_field_errors }}用来对非字段验证的错误信息进行渲染,form表示视图传递的form对象。在渲染时,为了与验证字段的错误信息进行区分,django在模板渲染后会在html标签中加上一个nonfield的class。例如{{ register_form.non_field_errors }} 被渲染后的html代码:

<ul>
    <li>这是一个非验证字段的错误信息</li>
</ul>

(3) 遍历隐藏字段和可见字段

在进行表单设计时,我们可能希望将 <input type="hidden"> 字段与非隐藏字段区别开来。因为隐藏字段不会显示任何内容,将错误消息“放到”该字段旁边可能会导致用户混淆——所以这些字段的错误信息应该以不同的方式进行处理。django在表单上提供了两种方法,允许独立地遍历隐藏域和可见的字段: hidden_fields() visible_fields()

代码实例:

{# 对隐藏域进行渲染 #}
 
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
 
{# 对可见字段进行渲染 #}
{% for field in form.visible_fields %}
    <div>
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

8.4.3 可复用的表单模板

在实际的开发过程中,可以通过将表单中的循环保存到独立的模板中,然后在其他模板中使用 include 标签来减少代码重复。提供表单复用的模板:

{% for field in form %}
    <div>
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

在其它模板中通过include来引用表单模板:

{% include "register_form.html" %}

如果传递给模板的表单对象在上下文中具有不同的名称,可以使用 include 标签的 with 属性来给它取别名。例如:

{% include "register_form.html" with form=register_form %}

8.4.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:



欢迎 发表评论: