天天看点

flask第二十二篇——模板【4】过滤器

寒风萧萧 飞雪飘零 长路漫漫 踏歌而行

  回首 望星辰 往事 如烟云

  犹记别离时 徒留雪中情

  雪中情 雪中情 雪中梦未醒

  痴情换得一生泪影

  雪中行 雪中行 雪中我独行

  挥尽多少英雄豪情

  唯有与你同行 与你同行才能把梦追寻

  寒风萧萧 飞雪飘零 长路漫漫 踏歌而行

  回首 望星辰 往事 如烟云

  犹记别离时 徒留雪中情

  雪中情 雪中情 雪中梦未醒

  痴情换得一生泪影

  雪中行 雪中行 雪中我独行

  挥尽多少英雄豪情 

  唯有与你同行 与你同行才能把梦追寻 

  雪中情 雪中情 雪中梦未醒 

  痴情换得一生泪影 

  雪中行 雪中行 雪中我独行 

  挥尽多少英雄豪情 

  唯有与你同行 与你同行才能把梦追寻           

复制

--------------------

先来教大家一个pycharm设置默认模板的方法。我们每次新建模板或者平时写代码打开以后可能都要重复写

# coding: utf-8

这些代码,其实我们可以设置好模板,让它自动生成的:

  • 打开pycharm的

    setting

    (windows)或者

    preference

    (Mac)
  • 进入:
flask第二十二篇——模板【4】过滤器

就可以看到:

flask第二十二篇——模板【4】过滤器

右侧就是默认生成的模板了,在这里改成默认生成的代码,以后就不用每次都写那些固定的代码了。

现在我把代码改为:

flask第二十二篇——模板【4】过滤器

这样每次我新建flask项目的时候默认就会生成这个模板了。

今天和接下来几天我们继续介绍模板,然后会有一个小项目,不会HTML也没关系,跟着船长一起写就可以了,等学完了flask你发现你会

html

了,也懂

数据库的增删改查

了,船长本来想专门讲前端的,后来觉得还是一起说算了,毕竟要不然时间就拖太长了。

过滤器:abs——绝对值

文件结构:

flask第二十二篇——模板【4】过滤器

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "name": "Warren",
        "age": -18
    }
    return render_template('index.html', **context)

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

复制

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>{{ age | abs }}</p>
</body>
</html>           

复制

flaskDemo.py

文件中

age

值是

-18

,如果我们在

index.html

文件中直接用

{{ age }}

那么页面返回的值就是-18,现在我们上面的代码给加了一个过滤器,就是

age | abs

后面的

| abs

就是一个

过滤器

了。在Python里,

abs

代表取

绝对值

。现在再执行代码,发现页面返回的就是18了。

| abs

中,

|

叫做

管道

,所以

过滤器

就是在

变量上,通过管道符号 | 加过滤器名称

来使用的。

过滤器:default——默认值

我们再讲一个过滤器——

default

,代码:

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
            "name": "Warren",
            "age": -18}
    }
    return render_template('index.html', **context)

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

复制

index.html

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default }}</p>
</body>
</html>           

复制

上面

user.gender

.py

文件里

context

里是没有这个key的,我们现在执行代码:

flask第二十二篇——模板【4】过滤器

看到默认值是空,现在把代码改为

{{ user.gender | default('male') }}

也就是我们给

gender

这个key传一个默认值:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default('male') }}</p>
</body>
</html>           

复制

执行代码,看到:

flask第二十二篇——模板【4】过滤器

此外,

default

还可以传一个布尔类型的值,默认是False,就是说如果前面的值有值,那么就返回原值,如果没值(None,False)——False的情况,就用过滤器里面的值:

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
                "name": "Warren",
                "age": -18,
                "gender": None}
    }
    return render_template('index.html', **context)

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

复制

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default('male', True) }}</p>
</body>
</html>           

复制

上面代码我们给

default

传了两个值,第二个是

True

,这时候执行代码,看到的默认值就是

male

flask第二十二篇——模板【4】过滤器

如果

default

False

{{ user.gender | default('male', False) }}

那么页面返回的就是

None

除了上面的写法以外,还以用

or

代替,这种情况就是不使用过滤器:

.py

文件不变

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender or 'male'}}</p>
</body>
</html>           

复制

执行代码:

flask第二十二篇——模板【4】过滤器

过滤器:转义

直接看代码比较方便:

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
            "name": "Warren",
            "age": -18,
            "gender": None,
            "comment": u'<script>alert("弹出框")</script>'}
    }
    return render_template('index.html', **context)


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

复制

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender or 'male'}}</p>
    <p>转义:{{ user.comment }}</p>
</body>
</html>           

复制

执行代码,看到页面返回的就是我们

.py

文件里写的,内容:

flask第二十二篇——模板【4】过滤器

现在修改

<p>转义:{{ user.comment }}</p>

<p>转义:{{ user.comment | safe }}</p>

,再执行代码:

flask第二十二篇——模板【4】过滤器

看到页面弹出了

alert

框,也就是说写的

js

代码生效了,在js中,弹出框就是

<script>alert('提示信息')</script>

(大家平时做测试时候也可以在输入框里输入一下这个,看一下开发们对这个有没有处理)。这就是

safe

过滤器的作用。

明天我们继续讲几个过滤器。今天这个大家趁着休息去试试吧~