成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計(jì)劃----Jinja2模板

gaomysion / 1112人閱讀

摘要:模板默認(rèn)保存在目錄。在使用函數(shù)調(diào)用模板文件時(shí),需要通過關(guān)鍵字參數(shù)指定值。模板中使用宏來防止代碼冗余。當(dāng)一個(gè)模板被另外的模板繼承時(shí),可以通過訪問父模板的資源。

什么是Jinja2

Jinja2是Python下一個(gè)被廣泛應(yīng)用的模版引擎,他的設(shè)計(jì)思想來源于Django的模板引擎,并擴(kuò)展了其語法和一系列強(qiáng)大的功能。其中最顯著的一個(gè)是增加了沙箱執(zhí)行功能和可選的自動(dòng)轉(zhuǎn)義功能,這對大多應(yīng)用的安全性來說是非常重要的。

基于unicode并能在python2.4之后的版本運(yùn)行,包括python3。

如何使用Jinja2

要想使用Jinja2模板,需要從flask導(dǎo)入render_template函數(shù),然后在路由函數(shù)中調(diào)用render_template函數(shù),該函數(shù)第一個(gè)參數(shù)就是模板名字。模板默認(rèn)保存在目錄。

最簡單的模板文件就是普通的HTML文件,但靜態(tài)文件沒什么意義,需要在訪問路由時(shí)傳入響應(yīng)的參數(shù),并在模板中以一定的樣式顯示在瀏覽器中,因此,需要用到render_template函數(shù)的關(guān)鍵字參數(shù)。假設(shè)有一個(gè)模板文件hello.html,代碼如下:

hello,{{name}}.

這個(gè)用{{......}}括起來的部分就是模板表達(dá)式。在使用render_template函數(shù)調(diào)用模板文件hello.html時(shí),需要通過關(guān)鍵字參數(shù)指定name值。

render_template("hello.html",name="star")

返回給客戶端時(shí),{{name}}會(huì)被替換成star.
網(wǎng)頁輸出代碼

hello,star.

jinja2常用語法
1.  變量顯示語法: {{ 變量名 }}

2. for循環(huán):
{% for i in li%}

{% endfor %}

3. if語句
{% if user == "westos"%}

{% elif user == "hello" %}

{% else %}

{% endif%}
數(shù)據(jù)顯示
# templates目錄里面建立mubna.html文件



    
    hello


變量:{{ name }}

列表:{{ li }}

列表元素: {% for item in li %}
{{ item }} {% endfor %}

字典:{{ d }}

字典元素: {{ d.a }} {{ d["b"] }}

對象:{{ u }}

用戶 密碼
{{ u.name }} {{ u.passwd }}
from flask import Flask, render_template

app = Flask(__name__)

class User(object):
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return  "" %(self.name)

@app.route("/")
def index1():
    name = "sheen is cute !!"
    li = [1, 2, 4, 5]
    d = dict(a=1, b=2)
    u = User("westos", "passwd")
    return  render_template("muban.html",
                            name = name,
                            li = li,
                            d = d,
                            u = u
                            )

app.run()

模板中的過濾器

服務(wù)端給客戶端返回的數(shù)據(jù)可能來自于多種數(shù)據(jù)源。這些數(shù)據(jù)格式可能并不能滿足客戶端需求,就需要對數(shù)據(jù)進(jìn)行再加工。
過濾器需要放在模板表達(dá)式變量的后面,與變量之間用"|"分割,{{ vlaue|upper}}將value英文字母都轉(zhuǎn)換為大寫形式。

編寫一個(gè)時(shí)間過濾器,將時(shí)間戳轉(zhuǎn)換為特定格式的字符串時(shí)間
from flask import Flask, render_template
import time
app = Flask(__name__)


def time_format(value,format="%Y-%m-%d %H:%M:%S"):
    #  時(shí)間戳----> 元組
    t_time = time.localtime(value)
    #  元組  ----> 指定字符串
    return time.strftime(format,t_time)
# 第一個(gè)參數(shù)是過濾器函數(shù),第二個(gè)參數(shù)是過濾器名稱
app.add_template_filter(time_format,"time_format")

@app.route("/chtime/")
def chtime():
    return render_template("chtime.html",timestamp = time.time())


app.run()
# templates/目錄下的chtime.html



    
    Title


時(shí)間戳
{{ timestamp }}

格式化后的時(shí)間 {{ timestamp | time_format }}

宏操作

在編寫python程序時(shí),會(huì)有很多地方調(diào)用同樣或類似的代碼。這種情況,可以把重復(fù)使用的代碼放到函數(shù)或類中,只需要訪問函數(shù)或類的實(shí)例就可以實(shí)現(xiàn)代碼復(fù)用。Jinja2 模板中使用宏來防止代碼冗余。

Jinja2 模板中的宏需要放到{%......%},使用修飾,支持參數(shù),并且使用{% endmacro %}結(jié)束

如果宏要被多個(gè)模板文件共享,就需要將宏多帶帶放到一個(gè)模板文件中,然后使用{% import ….%}指令導(dǎo)入該模板
調(diào)用宏,實(shí)現(xiàn)登陸頁面的模板繼承
## templates/目錄下的macro.html
{% macro input(type,  name, text ) %}

 
{% endmacro %}
# # templates/目錄下的login.html
{% extends "base.html" %}

{% block title %}
登陸
{% endblock %}


{% block content %}

登錄 沒有賬號(hào)?注冊

{# /*將表單信息提交給/login路由對應(yīng)的函數(shù)進(jìn)行處理, 并且提交信息的方式為post方法, 為了密碼的安全性*/#}
{% import "macro.html" as macro %} {#調(diào)用宏模板#} {{macro.input("text", "user", "用戶名/手機(jī)/郵箱" )}} {{macro.input("password","passwd", "密碼" )}}
{% if message %}

{{ message }}

{% endif %}
{% endblock %}
#主程序
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/login/")
def login():
    return render_template("login.html")

app.run()

模板繼承

Jinja2模板還有另一種代碼復(fù)用技術(shù),就是模板繼承。當(dāng)一個(gè)模板被另外的模板繼承時(shí),可以通過{{ super() }} 訪問父模板的資源。在一個(gè)模板中繼承另一個(gè)模板,需要extends 指令。如 child.txt 模板文件從 parent.txt 繼承的代碼

{% extends ‘parents.txt’ %}

child.txt 從parent.txt模板繼承后,會(huì)自動(dòng)使用parent.txt 中的所有代碼,但要放在

{% block xxxx%} ....  {% endblock %}

中的代碼需要child.txt中使用{{super() }}引用。其中,xxxx是塊(block)的名字
模板繼承語法:

1. 如何繼承某個(gè)模板?
        {% extends "模板名稱" %}


2. 如何挖坑和填坑?
挖坑:
    {% block 名稱 %}

        默認(rèn)值

    {% endblock %}


填坑:
    {% block 名稱 %}

    {% endblock %}


3. 如何調(diào)用/繼承被替代的模板?
挖坑:
    {% block 名稱 %}

        默認(rèn)值

    {% endblock %}


填坑:
    {% block 名稱 %}
        #如何繼承挖坑時(shí)的默認(rèn)值?
        {{ super() }}

        # 后面寫新加的方法.
        ........
    {% endblock %}
#templates目錄下建立parent.html模板文件



    {% block head %}
    
    {% block title %}hello{% endblock %}
    {% endblock %}


I LOVE PYTHON! 
{% block body %} Cute,{{ text }} {% endblock %}
#templates目錄下建立child.html模板文件
{% extends "parent.html" %}
{% block title %}
{#繼承挖坑時(shí)的默認(rèn)值:{{ super() }}#}
{{ super() }}-{{ text }}
{% endblock %}

{% block body %}

{{ super() }},Beauty!

{% endblock %}
# 主程序
from flask import Flask,render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("child.html",text = "sheen")

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44871.html

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----flask_bootstrap裝飾網(wǎng)頁

    摘要:并且只有數(shù)據(jù)庫中存在用戶可以登陸網(wǎng)頁。目前,對于用戶注冊,不返回?cái)?shù)據(jù)庫。用戶注冊時(shí),添加信息到數(shù)據(jù)庫中存放表單操作每個(gè)表單都由一個(gè)繼承自的類表示類表示的是屬性為的元素。當(dāng)注冊表單某一項(xiàng)不滿足程序定義的規(guī)則時(shí)當(dāng)注冊成功時(shí),返回 flask_bootstrap Bootstrap 是 Twitter 開發(fā)的一個(gè)開源框架,它提供的用戶界面組件可用于創(chuàng)建整潔且具有吸引力的網(wǎng)頁,而且這些網(wǎng)頁還能...

    _Zhao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<