国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python大佬養成計劃----Jinja2模板

gaomysion / 1102人閱讀

摘要:模板默認保存在目錄。在使用函數調用模板文件時,需要通過關鍵字參數指定值。模板中使用宏來防止代碼冗余。當一個模板被另外的模板繼承時,可以通過訪問父模板的資源。

什么是Jinja2

Jinja2是Python下一個被廣泛應用的模版引擎,他的設計思想來源于Django的模板引擎,并擴展了其語法和一系列強大的功能。其中最顯著的一個是增加了沙箱執行功能和可選的自動轉義功能,這對大多應用的安全性來說是非常重要的。

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

如何使用Jinja2

要想使用Jinja2模板,需要從flask導入render_template函數,然后在路由函數中調用render_template函數,該函數第一個參數就是模板名字。模板默認保存在目錄。

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

hello,{{name}}.

這個用{{......}}括起來的部分就是模板表達式。在使用render_template函數調用模板文件hello.html時,需要通過關鍵字參數指定name值。

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

返回給客戶端時,{{name}}會被替換成star.
網頁輸出代碼

hello,star.

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

2. for循環:
{% for i in li%}

{% endfor %}

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

{% elif user == "hello" %}

{% else %}

{% endif%}
數據顯示
# 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()

模板中的過濾器

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

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


def time_format(value,format="%Y-%m-%d %H:%M:%S"):
    #  時間戳----> 元組
    t_time = time.localtime(value)
    #  元組  ----> 指定字符串
    return time.strftime(format,t_time)
# 第一個參數是過濾器函數,第二個參數是過濾器名稱
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


時間戳
{{ timestamp }}

格式化后的時間 {{ timestamp | time_format }}

宏操作

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

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

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

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

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


{% block content %}

登錄 沒有賬號?注冊

{# /*將表單信息提交給/login路由對應的函數進行處理, 并且提交信息的方式為post方法, 為了密碼的安全性*/#}
{% import "macro.html" as macro %} {#調用宏模板#} {{macro.input("text", "user", "用戶名/手機/郵箱" )}} {{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模板還有另一種代碼復用技術,就是模板繼承。當一個模板被另外的模板繼承時,可以通過{{ super() }} 訪問父模板的資源。在一個模板中繼承另一個模板,需要extends 指令。如 child.txt 模板文件從 parent.txt 繼承的代碼

{% extends ‘parents.txt’ %}

child.txt 從parent.txt模板繼承后,會自動使用parent.txt 中的所有代碼,但要放在

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

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

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


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

        默認值

    {% endblock %}


填坑:
    {% block 名稱 %}

    {% endblock %}


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

        默認值

    {% endblock %}


填坑:
    {% block 名稱 %}
        #如何繼承挖坑時的默認值?
        {{ 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 %}
{#繼承挖坑時的默認值:{{ 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()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44871.html

相關文章

  • python大佬養成計劃----flask_bootstrap裝飾網頁

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

    _Zhao 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<