广州番禺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学习资料: