Flask-模板

模板-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) %}
    

{{str}}

{% endmacro %} {{show(uname)}}
  • 为了方便重复使用,允许将宏放在单独的模板文件中声明定义

{% macro show(str) %}
    

{{str}}

{% endmacro %} {% macro show_li(str) %}
  • {{str}}
  • {% endmacro %} {% import 'macro.html' as macros %} {{ macros.show_li(uname) }}
    模板的包含

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

    {% include 'xxx.html' %}
    

    静态文件

    什么是静态文件

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

    静态文件的处理

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

    # 正向解析
    
    
    # 反向解析
    url_for('static',filename='')
     
    

    模板的继承

    什么是模板的继承

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

    语法
    父模板

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

    {% 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-模板)