flask 使用宏渲染表单(包含错误信息)
在模板中渲染表单时,有大量的工作:
1、调用字段属性,获取<input>定义
2、调用对应的label属性,获取<label>定义
3、渲染错误消息
为了避免为每一个字段重复这些代码,我们可以创建一个宏来渲染表单字段
macro.html:
{% macro form_field(field) %}
{{ field.label }}<br>
{{ field(**kwargs) }}<br>
{% if field.errors %}
{% for error in field.errors %}
<small class="error">{{ error }}</small>>
{% endfor %}
{% endif %}
{% endmacro %}
这个form_field()宏接收表单类实例的字段属性和附加的关键字参数作为输入,返回包含<label>标签、表单字段、错误消息列表的HTML类表单字段代码。使用这个宏渲染表单的示例如下所示:
basic_macro.html:
{% from 'macros.html' import form_field %}
{% extends 'base.html' %}
{% block content %}
<form method="post">
{{ form.csrf_token }}
{{ form_field(form.name) }}<br>
{{ form_field(form.password) }}
{{ form.submit }}<br>
</form>
{% endblock %}
app.py中加视图函数
@app.route('/basic_macro',methods=['GET','POST'])
def basic_macro():
form = HelloForm()
if form.validate_on_submit():
username=form.name.data
flash('welcom home, %s!' % username)
return redirect(url_for('hello'))
return render_template('basic_macro.html',form = form)
访问127.0.0.1:5000/basic_macro:
输入空格,点击提交:

在上面的代码中,我们调用form_field()宏逐个渲染表单中的字段,只要把每一个类属性传入form_field()宏,即可完成渲染。
flask 使用宏渲染表单(包含错误信息)的更多相关文章
- flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因
flask用宏渲染表单模板时,表单提交后,提交的内容符合DataRequired()校验, 但是form.validate_on_submit()返回的是False, 原因可能是表单模板中的<f ...
- django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息
django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...
- [Flask]通过render_form快捷渲染表单
依赖: Bootstrap-Flask 实例化方式与flask_bootstrap相同. 关于render_form(): Bootstrap-Flask内置了两个用于渲染WTForms表单类的宏,r ...
- flask 在模板中渲染表单
在模板中渲染表单 为了能够在模板中渲染表单,我们需要把表单类实例传入模板.首先在视图函数里实例化表单类LoginForm,然后再render_template()函数中使用关键脑子参数form将表单实 ...
- Flask:处理Web表单
尽管 Flask 的请求对象提供的信息足以处理 Web 表单,但有些任务很单调,而且要重复操作.比如,生成表单的 HTML 代码和验证提交的表单数据.Flask-WTF 扩展可以把处理 Web 表单的 ...
- Flask Web Development —— Web表单(上)
Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...
- Flask学习 三 web表单
web表单 pip install flask-wtf 实现csrf保护 app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程 ...
- Flask--(一对多)模型渲染表单数据
模型建立一一对多模型: 多表添加外键,建立两张表之间的关系 一表关联多表的属性,可以方便快速访问多表的数据 模板一层循环渲染一表数据,二层循环渲染多表的数据 代码展示: from flask impo ...
- Flask基础(16)-->WTForms表单创建和简单验证
Flask基础(16)-->WTForms表单创建和简单验证 前言:使用Flask_WTF需要配置参数SECRET_KEYCSRF_ENABLED是为了CSRF(跨站请求伪造)保护.SECRET ...
随机推荐
- 【托业】【新东方全真模拟】01~02-----P5~6
12.precisely precise precision preciseness 114. 116. favorable adj.赞同的; 称赞的; 有利的; 讨人喜欢的; favor n.好感; ...
- 让网站不去请求favicon.ico图标
让网站不去请求favicon.ico图标 favicon.ico 图标用于收藏夹图标和浏览器标签上的显示,如果不设置,浏览器会请求网站根目录的这个图标,如果网站根目录也没有这图标会产生 404.出于优 ...
- AsyncStorage和Promise配合使用
代码: AsyncStorage封装 import {AsyncStorage} from "react-native"; class DeviceStorage { //保存数据 ...
- MySQL 5.7 新特性大全和未来展望
引用 美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计.之前在「高可用架构」发表的&l ...
- TCP路由网络通信
路由器 实现跨网段通信 路由器的工作原理是基于路由器中的路由表来实现数据包的路径选择 当路由器收到一个数据包的时候,会读取数据包的目标IP地址,根据目标IP地址来匹配路由表中的规则 单个路由器不会 ...
- 20165236 《Java程序设计》第七周学习总结
20165236 <Java程序设计>第七周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 1.MySQL数据库管理系统: MySQL数据库管理系统,简称MySQL,是 ...
- shell脚本中 if 判断时候-s是什么意思
-s file 文件大小非0时为真[ -f "somefile" ] :判断是否是一个文件 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可 ...
- [py]python写一个通讯录step by step V3.0
python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...
- Java中输出正则表达式匹配到的内容
import java.util.regex.Matcher; import java.util.regex.Pattern; public class A { public static void ...
- 背景图宽高100%无法无法显示的问题【body设置relative,当前元素absolute】
以下1,2两个关键元素 body{ width:100%; height:100%; position:relative; //1 } .login-form { width: 100%; ...