📜  在烧瓶中使用标记 - Python (1)

📅  最后修改于: 2023-12-03 15:37:44.656000             🧑  作者: Mango

在烧瓶中使用标记 - Python

烧瓶(Flask)是一个轻量级的Python Web框架,常用于构建Web应用程序,如API和Web服务。在烧瓶中使用标记,能够更灵活地渲染动态内容,增强用户体验。

Jinja2模板引擎

烧瓶默认使用Jinja2模板引擎,它能够从HTML文件中读取包含动态内容的标记,并根据提供的数据进行渲染,生成最终的HTML文档。

以下是一个示例Jinja2模板文件index.html,其中包含了两个变量namemessage

<!doctype html>
<html>
  <head>
    <title>Hello, {{ name }}!</title>
  </head>
  <body>
    <h1>{{ message }}</h1>
  </body>
</html>

在烧瓶中,可以使用render_template函数加载并渲染该模板文件,并将对应的数据传递进去。例如,以下代码将生成一个包含namemessage的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

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

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应用程序的开发,提高代码的可读性和可维护性。