📅  最后修改于: 2023-12-03 15:37:44.656000             🧑  作者: Mango
烧瓶(Flask)是一个轻量级的Python Web框架,常用于构建Web应用程序,如API和Web服务。在烧瓶中使用标记,能够更灵活地渲染动态内容,增强用户体验。
烧瓶默认使用Jinja2模板引擎,它能够从HTML文件中读取包含动态内容的标记,并根据提供的数据进行渲染,生成最终的HTML文档。
以下是一个示例Jinja2模板文件index.html
,其中包含了两个变量name
和message
。
<!doctype html>
<html>
<head>
<title>Hello, {{ name }}!</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
在烧瓶中,可以使用render_template
函数加载并渲染该模板文件,并将对应的数据传递进去。例如,以下代码将生成一个包含name
和message
的HTML页面:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
name = 'John'
message = 'Welcome to my Flask app!'
return render_template('index.html', name=name, message=message)
返回的页面内容将会是:
<!doctype html>
<html>
<head>
<title>Hello, John!</title>
</head>
<body>
<h1>Welcome to my Flask app!</h1>
</body>
</html>
除了Jinja2模板引擎,烧瓶还支持其他标记扩展,用于生成HTML页面中的动态内容。以下是一些常用的烧瓶标记扩展:
Flask-Bootstrap是一个基于Twitter Bootstrap的扩展,提供了一组易于使用的HTML和CSS组件,可以用于快速构建Web应用程序界面。以下是一个示例,使用Flask-Bootstrap来渲染一个导航栏和表格:
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
app = Flask(__name__)
bootstrap = Bootstrap(app)
@app.route('/')
def index():
items = [{'name': 'apple', 'price': 1.2},
{'name': 'banana', 'price': 0.9},
{'name': 'orange', 'price': 1.5}]
return render_template('index.html', items=items)
{% extends 'bootstrap/base.html' %}
{% block title %}My App{% endblock %}
{% block navbar %}
<nav class="navbar navbar-expand-lg navbar-dark bg-dark ">
<a class="navbar-brand" href="#">My App</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
</ul>
</div>
</nav>
{% endblock %}
{% block content %}
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{ item['name'] }}</td>
<td>{{ item['price'] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
Flask-WTF是一个用于处理表单的标记扩展,基于WTForms库。以下是一个示例,使用Flask-WTF来渲染一个简单的登录表单:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret key'
bootstrap = Bootstrap(app)
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
@app.route('/', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# handle login logic
username = form.username.data
password = form.password.data
return render_template('login.html', form=form)
{% extends 'bootstrap/base.html' %}
{% block title %}Login{% endblock %}
{% block content %}
<h1>Login</h1>
<form method="post" action="">
{{ form.csrf_token }}
{{ form.username.label }} {{ form.username }}
{{ form.password.label }} {{ form.password }}
<button type="submit">Login</button>
</form>
{% endblock %}
烧瓶使用标记是一种灵活、方便、快捷的方法,用于生成HTML页面中的动态内容。通过使用标记扩展,如Flask-Bootstrap和Flask-WTF,可以进一步简化Web应用程序的开发,提高代码的可读性和可维护性。