天天看點

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

過濾器的作用。

明天我們繼續講幾個過濾器。今天這個大家趁着休息去試試吧~