四、过滤器

作者: 十柒年 | 来源:发表于2018-08-27 18:00 被阅读41次

    1.过滤器介绍

    过滤器可以处理一些变量,把原始的变量经过处理后在展示出来。作用的对象是变量。过滤器也就是一个函数,不过是放到模板中用的。
    咱们看一个示例。

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    '''
    # 不使用过滤器直接传递头像
    @app.route('/')  
    def index():
        return render_template('index.html',avatar='https://cdn2.jianshu.io/assets/default_avatar/5-33d2da32c552b8be9a0548c7a4576607.jpg')
    '''
    
    # 使用过滤器,不传递头像路径的时候,显示默认值
    @app.route('/')
    def index():
        comments=[
            {
                'user': '张三',
                'content': 'xxxxx'
            },
            {
                'user': '李四',
                'content': 'aaaa'
            }
        ]
        return render_template('index.html',comments=comments)
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    

    这里面写了两个一个的index函数,第一个注释掉的函数就是模板里加了一个参数avatar。然后在页面里用img标签来展示这个图片。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <img src="{{ avatar }}"
         alt="">
    </body>
    </html>
    

    结果就是在页面里直接显示一张图片。类似这种效果。


    image.png

    然后该咱们的过滤器登场了,在一些博客论坛中大家应该能发现这样一种现象,在列表里,有些用户使没有头像的,对于那些没有头像的用户,系统给他们加了一个默认头像,这个是在咱们这一篇文章中是怎么做的呢。看代码

    # 不使用过滤器直接传递头像
    @app.route('/')  
    def index():
        return render_template('index.html')
    

    现在咱们把这个方法后面的avatar参数去掉.然后在HTML里这样写。

    <img src="{{ avatar | default('https://upload.jianshu.io/users/upload_avatars/6375263/99730b8f-ee16-4b18-9b05-8c945d0d2a5b.jpg') }}"
         alt="">
    

    这里在avatar后面加了个default并且给default加了个参数,这样就表示如果avatar没值的时候,就是现实default里面的默认值。
    这个就是default过滤器的使用。
    正好复习下咱们上篇文章讲的参数传递。实现下这种效果。

    image.png
    图片有点大,可以自行在img里加一些样式,会html的同学应该会的。接下来看代码。
    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    '''
    # 不使用过滤器直接传递头像
    @app.route('/')  
    def index():
        return render_template('index.html',avatar='https://cdn2.jianshu.io/assets/default_avatar/5-33d2da32c552b8be9a0548c7a4576607.jpg')
    '''
    
    # 使用过滤器,不传递头像路径的时候,显示默认值
    @app.route('/')
    def index():
        comments=[
            {
                'user': '张三',
                'content': 'xxxxx'
            },
            {
                'user': '李四',
                'content': 'aaaa'
            }
        ]
        return render_template('index.html',comments=comments)
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <img src="{{ avatar | default('https://upload.jianshu.io/users/upload_avatars/6375263/99730b8f-ee16-4b18-9b05-8c945d0d2a5b.jpg') }}"
         alt="">
    <hr>
    <p>评论数:({{ comments|length }})</p>
    <ul>
        {% for comments in comments %}
            <li>
                <a href="#">{{ comments.user }}</a>
                <p>{{ comments.content }}</p>
            </li>
        {% endfor %}
    </ul>
    </body>
    </html>
    

    这里面还用到了一个过滤器,叫lengthcomment|length就是返回comment列表里条数。其实在模板中的过滤器还有很多,在给大家简单写几个,abs、escape、first、format、last、length、join、safe、int、float、lower、upper、replace、truncate、striptags、trim、string、wordcount。
    完整代码在这。链接:https://pan.baidu.com/s/1NgRhPJTsOAvsfZgiP0jedg 密码:zwwa。
    Study hard and make progress every day.

    更多学习资料请关注"爱游戏爱编程"。


    爱游戏爱编程.jpg

    相关文章

      网友评论

        本文标题:四、过滤器

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