参考链接:
https://bootstrap-flask.readthedocs.io/en/stable/macros/#render-form
一个案例
1. 初始化一个flask app
from flask import Flask, render_template,request
from flask_wtf import FlaskForm, CSRFProtect
from wtforms.fields import *
from flask_bootstrap import Bootstrap5
# 初始化一个flask app
app = Flask(__name__)
# 设置秘钥,没有的话,会失败。作用是???
app.secret_key = 'dev'
csrf = CSRFProtect(app)
# 注意这里
bootstrap = Bootstrap5(app)
2. 基于wtf,做一个Form
其实就是继承FlaskForm
类,然后创建字段。
class ContactForm(FlaskForm):
name = TextAreaField("Name of Student")
email = EmailField("Input your Email")
password = PasswordField("Input your Password")
submit = SubmitField("提交")
3. 做一个视图函数,并将 Form 传入模板
# 这个视图函数是传入Form的
@app.route('/', methods=['GET'])
def contact():
form = ContactForm() # 先实例化Form
return render_template('contact.html', form=form)
# 顺别做一个表格提交后,跳转的视图
@app.route('/out', methods=['GET', 'POST'])
def out():
print(request.form)
return '123'
4. 模板
注意看,下面这个模板,有几点:
{{ bootstrap.load_css() }}
这句话表示冲bootstrap中导入css。如果没有这行,那么渲染会失败。{% from 'bootstrap5/form.html' import render_form %}
这句话表示导入render_form
方法,用于form的渲染。{{ render_form(form) }}
这句话表示对form
执行渲染,form的内容来源于app 视图函数传入。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bootstrap-Flask Demo Application</title>
{{ bootstrap.load_css() }}
</head>
<body>
{% from 'bootstrap5/form.html' import render_form %}
<main class="container">
{{ render_form(form) }}
</main>
</body>
</html>
来看看实际效果
拓展
- 其实除了
render_form
,还有render_field
和render_form_row
渲染方式,详细的可以看看官方文档。