1. 程式人生 > >第六章:FLASK模版引擎以及模版方法

第六章:FLASK模版引擎以及模版方法

temp 不想 set 並且 art xtend string 截取字符串 一個數

一,上節回顧:

  1) 什麽是藍圖?

  2) 為什麽用藍圖?

  3) 怎麽實例化一個藍圖?

  4) 怎麽將藍圖註冊到flask的核心對象上?

二,什麽是模版引擎?

  模板引擎(這裏特指用於Web開發的模板引擎)是為了使用戶界面與業務數據(內容)分離而產生的,它可以生成特定格式的文檔,用於網站的模板引擎就會生成一個標準的HTML文檔。(摘自 百度百科)

三,模版引擎都有什麽?flask用的是什麽模版引擎?

  模版引擎有很多種,像 PHP(smarty) Python(Janjia,marco) Java(Thymeleaf ,Freemarker) 等

  Flask 常用的模版引擎 是 Janjia2

四,模版渲染和傳遞參數

  1. 在 app 應用下 新建一個 templates 文件夾,然後裏面新建 user.html 文件

  技術分享圖片

  2.在admin/user.py中 引入render_templates

  技術分享圖片

  3. 調用瀏覽器 http://127.0.0.1:8888/user

  技術分享圖片

  4. templates只能在app下嗎?

    flask 框架 默認templates(模版文件)安裝在項目的根目錄下,項目跟目錄是根據flask的核心app一直,所以鑒於本例,templates只能在app下。

    如果我不想讓我的模版文件夾在app下,我可不可以更改位置呢?答案是可以的,你可以在 Flask(__name__)這裏更新一下就行,具體代碼如下:

    技術分享圖片

    項目目錄:

    技術分享圖片

    瀏覽器調用 http://127.0.0.1:8888/user

    技術分享圖片

五,模版語法

1. 變量

數據量小的時候可以選擇此種寫法:

user.py 文件代碼

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    return render_template(‘user.html‘,name =‘xiaoerhei‘
)

user.html 中代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>測試</title>
</head>
<body>
    {{ name }}測試頁面
</body>
</html>

瀏覽器調用: http://127.0.0.1:8888/user

技術分享圖片

數據量大的時候可以選擇此種寫法

user.py

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    dict = {"name":"pidaye","age":5}
    return render_template(‘user.html‘,data =dict)

user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>測試</title>
</head>
<body>
    姓名:{{ data.name }}<br />
    年齡:{{ data.age }}
</body>
</html>

瀏覽器調用 : http://127.0.0.1:8888/user

技術分享圖片

2. 過濾器

 過濾器的使用方法,變量可以通過 過濾器 修改。過濾器與變量用管道符號( | )分割,並且也 可以用圓括號傳遞可選參數。多個過濾器可以鏈式調用,前一個過濾器的輸出會被作為 後一個過濾器的輸入。

  語法: {{ avatar | default(‘xxx‘) }}

  user.py

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    dict = {"name":"   pidaye"}
    return render_template(‘user.html‘,data =dict)

  user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>測試</title>
</head>
<body>
    {{ data.name | striptags | upper }}測試頁面
</body>
</html>

  

過濾器的清單 http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters

常用的過濾器有:

  abs(value):返回一個數值的絕對值。示例:-1|abs

  default(value,default_value,boolean=false):如果當前變量沒有值,則會使用參數中的值來代替。

  escape(value)或e:轉義字符,會將<、>等符號轉義成HTML中的符號。示例:content|escape或content|e。

  first(value):返回一個序列的第一個元素。示例:names|first

  format(value,*arags,**kwargs):格式化字符串。比如: {{ "%s" - "%s"|format(‘Hello?‘,"Foo!") }} 將輸出:Helloo? - Foo!

  last(value):返回一個序列的最後一個元素。示例:names|last。

  length(value):返回一個序列或者字典的長度。示例:names|length。

  join(value,d=u‘‘):將一個序列用d這個參數的值拼接成字符串。

  safe(value):如果開啟了全局轉義,那麽safe過濾器會將變量關掉轉義。示例:content_html|safe

  int(value):將值轉換為int類型。

  float(value):將值轉換為float類型。

  lower(value):將字符串轉換為小寫。

  upper(value):將字符串轉換為小寫。

  replace(value,old,new): 替換將old替換為new的字符串。

  truncate(value,length=255,killwords=False):截取length長度的字符串。

  striptags(value):刪除字符串中所有的HTML標簽,如果出現多個空格,將替換成一個空格。

  trim:截取字符串前面和後面的空白字符

  string(value):將變量轉換成字符串

  wordcount(s):計算一個長字符串中單詞的個數。

3. if 語句,和python中的if 語句幾乎一樣:

{% if 10>5 %}
   10>5
{% else %}
   10<5
{% endif %}

  

4. for 語句,和 python語法幾乎一致

{% for i in range(10)%}
        {{ i }}
{% endfor %}

  

5. 模版繼承

1. 繼承作用和語法:
作用:可以把一些公共的代碼放在父模板中,避免每個模板寫同樣的代碼。
語法:

{% extends ‘base.html‘ %}

2. block實現:
作用:可以讓子模板實現一些自己的需求。父模板需要提前定義好。
註意點:字模板中的代碼,必須放在block塊中。

語法:

父文件:
        {% block 名稱 %}

            默認值

        {% endblock %}


子文件:
        {% block 名稱 %}
    
            這是子文件的內容

        {% endblock %}    


# 子文件block 的名稱 要和 父文件block 的名稱保證一致

  

示例:

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>這是頭部</h2>
  {% block section %}

  {% endblock %}
<h2>這是底部</h2>
</body>
</html>

user.html

{% extends ‘base.html‘ %}
{% block section %}
    這是中間位置
{% endblock %}調用

瀏覽器訪問: http://127.0.0.1:8888/user

  技術分享圖片

    

  

第六章:FLASK模版引擎以及模版方法