美文网首页
Flask-模板

Flask-模板

作者: 遇明不散 | 来源:发表于2019-05-03 00:14 被阅读0次

模板-Templates

什么是模板

模板是一个包含响应文本的文件(通常是html文件),该文件中允许包含"占位变量"来表示动态的内容,其具体值在请求中才能知道。"占位变量"最终会被真实的值所替换。模板最终也会被解析成响应的字符串,这一过程称为"渲染"。Flask实际上是使用 Jinja2 强大的模板引擎。

模板的设置

默认情况下,Flask会在程序文件夹中的 templates 子文件夹中寻找模板,需要手动创建 templates 文件夹。

渲染模板

在 视图函数中,通过return render_template()将模板渲染成字符串再响应给客户端

render_template('xxx.html',arg1 = value1,arg2 = value2)
# 参数1:xxx.html,要渲染给客户端的html模板文件
# 参数2 ~ n:要传递给模板动态显示的变量占位符,如果没有动态的变量占位符,则可以省略
# 返回值:字符串

模板语法

变量

变量时一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中来获取的。变量类型可以是python中的任意数据类型。

  • 在视图中
@app.route('/')
def index():
    return render_template('xxx.html',name='sf.zh',age=18)
# name和age就是要传递到xxx.html中的变量
  • 在模板中
{{变量名}}
{{params.变量名}}
变量的传递方式
  • 直接传递
# 方式一,直接传递
@app.route('/temp')
def temp():
    res = render_template('temp.html',
                          title = '关于本书',
                          bookName = '《钢铁是咋练成的》',
                          bookAuthor = '奥斯特洛夫斯基',
                          bookPrice = '32.5',
                          bookPlace = '北京大学出版社')
    return res
  • 将变量封装为字典
@app.route('/temp')
def temp():
    bookInfo = {
        'title':'关于本书',
        'bookName':'《钢铁是咋练成的》',
        'booAuthor':'奥斯特洛夫斯基',
        'bookPrice':32.5,
        'bookPlace':'北京大学出版社'
    }
    res = render_template('temp.html',params = bookInfo)
    return res
  • 利用locals()方法
@app.route('/temp')
def temp():
        title = '关于本书'
        bookName = '《钢铁是咋练成的》'
        booAuthor = '奥斯特洛夫斯基'
        bookPrice = 32.5
        bookPlace = '北京大学出版社'

    res = render_template('temp.html',params = locals())
    return res
过滤器
什么是过滤器

过滤器是允许在变量输出显示之前改变变量的值

过滤器的语法
# 语法
{{变量|过滤器}}

# Jinja2 变量过滤器
# 过滤器名             说明
# capitalize          首字符变大写,其他字符变小写
# lower               把值转换成小写
# upper               把值转换成大写
# title               把值中的每个单词的首字符变大写
# trim                把值两端的空格去掉
控制结构
if 结构
{% if 条件 %}
    # 满足条件要执行的代码
{% else %}
    # 不满足条件要执行的代码
{% endif %}
for 结构
{% for 变量 in 元组|列表|字典 %}
{% endfor %}
  • 使用{% macro %}标签声明宏
<!-- 声明 -->
{% mscro show(str) %}
    <h1>{{str}}</h1>
{% endmacro %}

<!-- 调用 -->
{{show(uname)}}
  • 为了方便重复使用,允许将宏放在单独的模板文件中声明定义
<!-- 创建 macro.html -->
{% macro show(str) %}
    <h1>{{str}}</h1>
{% endmacro %}

{% macro show_li(str) %}
    <li>{{str}}</li>
{% endmacro %}

<!-- 在使用的网页中,导入 macro.html -->
{% import 'macro.html' as macros %}
{{ macros.show_li(uname) }}
模板的包含

在多处重复使用的模板代码可以放在单独的文件中,可以被其他的模板所包含(引用)

{% include 'xxx.html' %}

静态文件

什么是静态文件

在Flask中不能与服务器动态交互的文件都是静态文件,如:css,js,图片,音视频等

静态文件的处理

所有静态文件都保存在项目文件夹中的 static 文件夹中,在访问静态文件的时候需要通过 /static/资源路径 进行访问

# 正向解析
<img src="/static/资源路径">

# 反向解析
url_for('static',filename='<file_path>')
<img src="{{url_for('static',filename='images/b04.jpg')}}"> 

模板的继承

什么是模板的继承

模板的继承类似于类的继承,如果在一个模板中出现的大量内容是另外一个模板的话,那么就可以使用继承的方式来简化开发

语法
父模板

需要定义出哪些内容在子模板中是可以被重写的

{% block 块名 %}
{% endblock %}
# block:定义允许在子模板中被修改的内容
# 在父模板中正常显示,没有任何影响
# 在子模板中可以被重写
子模板
  • 使用 {% extends '父模板名称' %} 来完成继承
  • 使用 {% block 块名 %} 来重写父模板中的同名内容
{% block 块名 %}
    # 覆盖掉父模板中的内容
{% endblock %}
# 允许通过 {{super()}} 来调用父模板中的内容

自定义错误页面

404.html,500.html等需要自定义

404错误处理
@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'),404
500错误处理
@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'),500

修改配置

app = Flask(__name__,
      template_folder='muban',
      static_url_path='/s',
      static_folder='/sta')

template_folder   # 设置模板的保存路径
static_url_path   # 设置静态文件的访问路径(映射到WEB中的访问路径)
static_folder     # 设置静态文件的保存目录(映射到项目中的目录名称)

相关文章

  • Flask 框架(2)-模板

    Flask-模板

  • Flask-模板

    模板-Templates 什么是模板 模板是一个包含响应文本的文件(通常是html文件),该文件中允许包含"占位变...

  • flask-模板

    一、模板的定义 二、模板引擎 flask使用jinja2作为默认模板引擎 2-1:默认配置 template_fo...

  • flask-模板语法之模板标签

    一:语法 二:if条件控制 app.py tag.html 三:for循环 3-1:demo1 app.py ta...

  • flask-模板全局函数

    一、全局函数 二、目录与代码 app.py global_func.html

  • flask-模板的继承

    一、继承的实现 二、目录结构和代码 app.py 公共部分--base.html 继承页面:首页-index.ht...

  • flask-模板中的宏

    一、宏的定义 把常用功能抽取出来,实现可重用 简单理解:宏≈函数 宏可以写在单独的html文件中 二、基础使用 a...

  • flask-模板中变量的使用

    一、基础变量的渲染 代码app.py index.html 二、dict类型数据的渲染 app.py index....

  • python版websocket

    背景 目前看到实现websocket的框架的- django的channels- flask- sanic好奇,用...

  • flask-信号

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。 使用方法...

网友评论

      本文标题:Flask-模板

      本文链接:https://www.haomeiwen.com/subject/lkknnqtx.html