【Flask】Flask 模板

Flask 模板

在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单请求.实际上,视图函数有两个作用:

  • 处理业务逻辑
  • 返回响应内容

在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.

  • 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取
  • 使用真实值替换变量,再返回最终得到的字符串,这个过程称为'渲染'
  • Flask 是使用 Jinja2 这个模板引擎来渲染模板

使用模板的好处

  • 视图函数只负责业务逻辑和数据处理(业务逻辑方面)
  • 而模板则取到视图函数的数据结果进行展示(试图展示方面)
  • 代码结构清晰,耦合度低

模板基本使用

在项目下创建 templates 文件夹,用于存放所有模板文件,并在目录下创建一个模板文件 html 文件 hello.html 

示例代码:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    my_int = 18
    my_str = 'curry'
    my_list = [1, 5, 4, 3, 2]
    my_dict = {
        'name': 'durant',
        'age': 28
    }

    # render_template方法:渲染模板
    # 参数1: 模板名称  参数n: 传到模板里的数据
    return render_template('hello.html',
                           my_int=my_int,
                           my_str=my_str,
                           my_list=my_list,
                           my_dict=my_dict)


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

在py所在的文件夹下新建文件夹templates,然后在templates中新建hello.html 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
  <h2>我是模板</h2>
  {
   
   { my_int }}
  <br>
  {
   
   { my_str }}
  <br>
  {
   
   { my_list }}
  <br>
  {
   
   { my_dict }}
  <hr>
  <h2>模板的list数据获取</h2>
  <hr>
  {
   
   { my_list[0] }}
  <br>
  {
   
   { my_list.1 }}
  <hr>
  <h2>字典数据获取</h2>
  <hr>
  {
   
   { my_dict['name'] }}
  <br>
  {
   
   { my_dict.age }}
  <hr>
  <h2>算术运算</h2>
  <br>
  {
   
   { my_list.0 + 10 }}
  <br>
  {
   
   { my_list[0] + my_list.1 }}
</body>

</html>

访问           htpp://127.0.0.1:5000/             运行测试 

使用

  • { {}}来表示变量名,这种{ {}}语法叫做变量代码块
<h1>{
   
   {post.title}}</h1>

Jinja2模板中的变量代码块可以使任意Python类型或者对象,只要它能够被Python的str()方法转化为一个字符串就可以,比如,可以通过下面的方式显示一个字典或者列表中的某个元素

{
   
   {your_dict['key']}}
{
   
   {your_list[0]}}
  • 用{%%}定义的控制代码块,可以实现一些语言层次的功能,比如循环语句
{% if user %}
    {
   
   { user }}
{% else %}
    hello!
<ul>
    {% for index in indexs %}
    <li> {
   
   { index }} </li>
    {% endfor %}
</ul>

注释

  • 使用{##}进行注释,注释的内容不会在html中被渲染出来
{#{
   
   { name }}#}

猜你喜欢

转载自blog.csdn.net/u013066730/article/details/108356847