Flask-模板

2019-05-03  本文已影响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
@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 %}
<!-- 声明 -->
{% 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:定义允许在子模板中被修改的内容
# 在父模板中正常显示,没有任何影响
# 在子模板中可以被重写
子模板
{% 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     # 设置静态文件的保存目录(映射到项目中的目录名称)
上一篇 下一篇

猜你喜欢

热点阅读