zoukankan      html  css  js  c++  java
  • flask框架--模板

      今天又是一个精彩又无聊的一天,不过随着知识的缓慢的增加我的内心也充满了干劲,虽然前进的有些缓慢 但我不会这么容易放弃的,一定要相信自己,不要灰心

    好了 ~ 不说废话了 , 我自己听的都有些受不了了 。

      我呢  , 今天学习了模板,在这里我给大家说说几句 关于模板的

      首先说一下模板的作用:模板可以承担视图函数又可以返回响应的内容

      视图函数只负责业务逻辑和数据处理(业务逻辑方面),而模板则取到视图函数的数据结果进行展示(视图展示方面)

    代码结构清晰,耦合度底。

      模板引擎有很多,不过在这里我给大家说的是Jinjia2 ,它是在Python下一个被广泛应用的模板引擎,是有Python实现的模板语言,他的设计思想来源于Django的模板引擎,并扩展了其语法金和一系列强大的功能,其实Flask内置的模板语言。

      模板语言:是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,途欢模板的特定文职上预先定义好的占位变量名。

      渲染模板函数:Flask提供的render_template函数封装了该模板引擎,render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。

      {{}} 来表示变量名,这种语法叫做变量代码块,在变量代码块中可以是任意Python类型或者对象,只要能够被转换成str()类型就可以,{%%} 用这个来定义的控制块代码,可以实现一些语言层次的功能,比如循环语句或者if语句,{##} 使用这个符号进行注释,注释的内容不会再html中被渲染出来。

      接下来我给大家展示一个实例:

      

    第一步 当然先导入模块啦
    
      from flask import,render_template
    
      建立对象
    
      app = Flask(__name__)
    
      导入配置文件  #我喜欢这个方法,当然也可以用其他的方法
    
      app.config.from_pyfile('config.ini')
    
     路由
    
      @app.route('/')
    
      def index():
    
        context = {}
    
        context['my_str'] = ‘你好世界’
    
        context['my_int'] = 100
    
        context['my_list'] = [4,3,2,4,2,3]
    
        context['my_dict'] = {'name':'xiaoming','age':19}
    
        使用render_template模块来渲染模板文件,通过第二个参数传递数据变量,通过**引用来将嵌套dict直接传递给模板
    
        return render_template('day3.html',**context)
    
     if __name__ == "__main__":
    
        app.run()

    这是一个模板文件,还得写一个day3.html的文件的网页模板

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>flask网页模板的学习</title>
    </head>
    <body>
     
     
    <div>
    这是我们的网页模板
    <br /><br />
    {# 这里是注释,最基本的模板语法,输出一个变量 #}
    {{ my_str }}
    <br /><br />
    {# 模板语法可以做简单的运算操作#}
    {{my_int+44}}
    <br /><br />
    {# 模板语法可以以下标引用的方式输出list元素#}
    {{my_list [0] }} {{my_list.1 }}
    <br /><br />
    {{my_dict['name']}} {{my_dict.age}}
    <br /><br />
    {# 使用{%%}来定义简单的逻辑控制代码#}
    {% if my_int %}
    整形存在
    {% else%}
    不存在
    {# 使用if判断,一定要有endif 用来结束逻辑判断#}
    {% endif%}
    
    <ul>
    {# 使用for循环来遍历list , for 也必须endfor 用来结束循环 #}
    {% for item in my_list %}
    <li>{{item}}</li>
    {% endfor %}
    </ul>
    
    
    {# 使用 if for 嵌套来实现单双行背景色 #}
    <table style="border:1px solid black; padding:5px;">
    {% for item in my_list %}
    {# 使用loop关键字可以调用循环的索引,用来判断下标单双数 #}
    {% if loop.index % 2 == 0 %}
    <tr style="<td>{{ item }}</td></tr>
    {% else %}
    <tr style="<td>{{ item }}</td></tr>
    {% endif %}
    
    {% endfor %}
    </table>
    </div>
    </body>
    </html>

    接下来说一下过滤器:

    过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化,运算等等,而在模板中是不能直接调用Python中的某些方法,那么过滤器的作用就找到了。

    使用方法:变量名|过滤器  {{variable | filter_name(*args)}},如果没有任何参数传给过滤器,则可以把括号省略掉 ,

    链式调用:{{“helloworld”|reverse|upper}}

    常见内建过滤器,字符串操作,   safe:禁用转义  <p>{{'<em>hello</em>'|safe}}</p>

    capitalize:把变量值得首字母转成大写,其余字母小写 <p>{{'hello'|capitalize}}

    lower:把值转成小写    <p>{{'HELLO'|lower}}</p>

    upper:把值转换成大写 ,title:把值中的每个单词的首字母都转换成大写 , reverse:字符串反转,formate:格式化输出 <p>{{'%s is %d |formate{'name',17}'}}</p>

    striptags:渲染之前把值中所有的HTML标签都删掉   <p>{{'<em>hello</em>'|striptags}}</p>

    truncate:字符串截断  <p>{{'hello every one'|truncate(9)}}</p>

    接下来是列表操作:

    first:取第一个元素  <p> {{[1,2,3,4] | first}}</p>

    last  :取最后一个元素,

    length : 获取列表长度

    sum:列表求和

    sort:列表排序

    语句块操作:
    {%filter upper%}
    
     #一段文字#
    
    {%endfilter%}

    控制块代码:

    if语句
    
    {% if %} {% elif %}
    
    {% endif %}
    
    循环语句:
    
    {% for %} 
    
    {% endfor %}

    就写这些了 ,   我要开始复习了    接下来的 什么时候有空在写  。

  • 相关阅读:
    Confluence 6 连接到一个 LDAP 目录
    Confluence 6 LDAP 成员结构设置
    Confluence 6 LDAP 用户组结构设置
    Confluence 6 LDAP 用户结构设置
    Confluence 6 LDAP 高级设置
    Confluence 6 自动添加用户到用户组
    Confluence 6 权限设置
    一个小白的测试环境docker化之路
    客户端SDK测试思路
    限时购校验小工具&dubbo异步调用实现限
  • 原文地址:https://www.cnblogs.com/weifeng-888/p/10157404.html
Copyright © 2011-2022 走看看