Flask之模版(2)

Flask默认使用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。下面主要回顾模版的渲染使用,以及Jinja2的语法。

1 模版渲染

1.1 目录结构

Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:
场景1: 模块
application文件应该与templates目录同级

/application.py
/templates
    /hello.html

场景2: 包
templates目录作为application的子目录

/application
    /__init__.py
    /templates
        /hello.html
1.2 渲染

Flask使用 render_template() 方法来渲染模板。渲染时框架会自动寻找templates目录下的网页文件,不必添加"templates"这个路径。
render_template()方法第一个参数为html文件名,后续参数为模版文件中的变量名,可支持字典类型变量。
在模板里,也可以访问 request 、 session 和 g 对象, 以及 get_flashed_messages() 函数。

用法示例
文件目录结构:
在这里插入图片描述
html文件user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask首页</title>
</head>
<body>
    {
   % if name %}
  <h1>Hello {
   {
    name }}!</h1>
{
   % else %}
  <h1>Hello world!</h1>
{
   % endif %}
</body>
</html>

模版渲染代码manager.py:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/user/")
@app.route("/user/<name>")
def index(name=None):
   return render_template("user.html", name=name)

if __name__ == '__main__':
   app.run(debug=True)

在浏览器中输入URL:http://127.0.0.1:5000/user/bruce
页面显示如下
在这里插入图片描述

1.3 字典类型变量

当模版中变量比较多时,可以直接使用字典类型变量。
修改user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask首页</title>
</head>
<body>
    {
   % if name %}
  <h1>Hello {
   {
    name }}!</h1>
    <h2>user age: {
   {
   age}}, phone: {
   {
   phone}}!</h2>
{
   % else %}
  <h1>Hello world!</h1>
{
   % endif %}
</body>
</html>

修改渲染代码:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/user/")
@app.route("/user/<name>")
def index(name=None):
    info = {
   
        "name": name,
        "age": 33,
        "phone": 123456789
    }
    return render_template("user.html", **info)

if __name__ == '__main__':
   app.run(debug=True)

浏览器输入URL:http://127.0.0.1:5000/user/bruce.xu
在这里插入图片描述

2 Flask变量传递

Jinja 2 默认配置如下:
所有扩展名为 .html 、 .htm 、 .xml 以及 .xhtml 的模板会开启自动转义
模板可以利用 {% autoescape %} 标签选择自动转义的开关。
Flask 在 Jinja2 上下文中插入了几个全局函数和助手,另外还有一些目前默认的值。

Flask全局变量
下面的全局变量默认在 Jinja2 模板中可用

变量 说明
config 当前的配置对象 (flask.config)
request 当前的请求对象 (flask.request)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
session 当前的会话对象 (flask.session)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
g 请求相关的全局变量 (flask.g)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
url_for() flask.url_for() 函数
get_flashed_messages() flask.get_flashed_messages() 函数

(1)请求对象request
request对象可以用来获取请求的方法”request.method”,表单”request.form”,请求的参数”request.args”,请求地址”request.url”等。它本身是一个字典。在模板中,你一样可以获取这些内容,只要用表达式符号”{ { }}”括起来即可。

<p>{
   {
   request.url}}</p>

(2)会话对象session
session对象可以用来获取当前会话中保存的状态,它本身是一个字典。在模板中,你可以用表达式符号”{ { }}”来获取这个对象。
在request对象中设置session变量

@app.route('/')
def index():
    session['user']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NAND Flash是一种非易失性存储器件,由于其高速、低功耗、低成本等特点,已经成为现代电子设备中最常用的存储媒介。在使用NAND Flash进行数据存储时,需要使用Flash Translation Layer(FTL)来管理其物理块(PBA)和逻辑块(LBA)之间的映射关系。以下是一个简单的NAND Flash FTL模板,以供参考: ```python class FTL: def __init__(self, n_blocks, block_size, page_size): self.n_blocks = n_blocks # 总物理块数 self.block_size = block_size # 每个物理块的大小 self.page_size = page_size # 每个物理块中的页面大小 self.lba_to_pba = {} # LBA到PBA的映射表 self.free_blocks = set(range(n_blocks)) # 空闲物理块集合 def write(self, lba, data): # 检查是否需要新分配物理块 if lba not in self.lba_to_pba: if not self.free_blocks: raise Exception('Out of space!') pba = self.free_blocks.pop() self.lba_to_pba[lba] = pba pba = self.lba_to_pba[lba] # 写数据到物理块中 # ... def read(self, lba): if lba not in self.lba_to_pba: raise Exception('Block not found!') pba = self.lba_to_pba[lba] # 从物理块中读取数据 # ... def erase(self, lba): if lba not in self.lba_to_pba: raise Exception('Block not found!') pba = self.lba_to_pba[lba] # 擦除物理块 # ... self.free_blocks.add(pba) del self.lba_to_pba[lba] ``` 在这个模板中,我们使用一个字典`lba_to_pba`来记录LBA和PBA之间的映射关系。在写入数据时,如果该LBA没有对应的PBA,则需要从空闲物理块中选择一个新的物理块,并将其分配给该LBA。在读取数据时,我们可以从`lba_to_pba`中查找该LBA对应的PBA,并从该PBA中读取数据。在擦除数据时,我们需要擦除该LBA对应的PBA,并将该PBA重新加入到空闲物理块集合中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值