摘要:使用真實值替代變量,再返回最終得到的響應字符串,這一過程成為渲染。渲染模板渲染模板提供的函數把模板引擎集成到了程序中。隨后的參數都是鍵值對,表示模板中變量對應的真實值。程序現在使用的模板繼承自不是直接繼承自的基模板。
本系列筆記是我閱讀Miguel Grinberg的《Flask Web Development》的筆記,標題與書本同步。希望通過記錄技術筆記的方式促進自己對知識的理解。
本篇對應書本第三章:模板。
Jinja2模板引擎模板是一個包含響應文本的文件,其中包含用占位變量表示的動態部分,其具體值只在請求的上下文中才能知道。使用真實值替代變量,再返回最終得到的響應字符串,這一過程成為渲染。
Flask渲染模板使用的是Jinja2模板引擎。
渲染模板hello.py 渲染模板 from flask import Flask,render_template #... @app.route("/") def index(): return render_template("index.html") @app.route("/user/變量") def user(name): return render_template("user.html",name=name) # Flask提供的render_template函數把Jinja2模板引擎集成到了程序中。 # render_template函數的第一個參數是模板的文件名。 # 隨后的參數都是鍵值對,表示模板中變量對應的真實值。
模板中使用的{{ name }}結構表示一個變量,它是一種特殊的占位符,告訴模塊引擎這個位置的值從渲染模板時使用的數據中獲取。
Jinja2能識別所有類型的變量,示例:
變量過濾器A value from a dictionary:{{ mydict["key"]}}.
A value from a list:{{ mylist[3]}}.
A value from a list,with a variable index:{{ mylist[myintvar] }}.
A value from an object"s method: {{ myobj.somemethod() }}.
過濾器名添加在變量之后,中間使用豎線分隔。
hello, {{ name|capitalize }}
常用過濾器:
過濾器名 | 說明 |
---|---|
safe | 渲染值時不轉義 |
capitalize | 把值得首字母轉換成大寫,其他字母轉換成小寫 |
lower | 把值轉換成小寫形式 |
upper | 把值轉換成大寫形式 |
title | 把值中每個單詞的首字母都換成大寫 |
trim | 把值的首位空格去掉 |
striptags | 渲染之前把值中所有的HTML標簽都刪掉 |
{% if user %} Hello,{{ user }}! {% else %} Hello, Stranger! {% endif %}渲染一組元素
{{% macro render_comment(comment)%}}
{% include "common.html" %}模板繼承
- 建一個名為base.html的基模板 {% block head %}使用Flask-Bootstrap集成Twitter Bootstrap{% block title %}{% endblock %} - My Application {% endblock %} {% block body %} {% endblock %} - 衍生模板中修改block標簽定義的元素 {% extends "base.html" %} #定義基模板 {% block title%}Index{% endblock %} #修改title塊內容 {% block head %} #修改head塊內容 {{ super() }} #原來head中有內容,用super()獲取原來的內容 {% endblock %} {% block body %} #修改body塊內容Hello, World!
{% endblock %}
安裝Flask-Bootstrap擴展Bootstrap是Twitter開發的一個開源框架,它提供用戶界面組件可用于創建整潔且具有吸引力的網頁,而且這些網頁還能兼容所有現代Web瀏覽器。Bootstrap是客戶端框架,不會直接涉及服務器。可以在模板中引用Bootstrap的CSS和JavaScript文件。
(venv)$ pip install flask-bootstrap hello.py: 初始化Flask-Bootstrap from falsk_bootstrap import Bootstrap # ... bootstrap = Bootstrap(app)使用Flask-Bootstrap的模板
{% extends "bootstrap/base.html" %} {% block title%}Flasky{% endblock %} {% block navbar %}Flask-Bootstrap基模板中定義的塊 {% endblock %} {% block content %}{% endblock %} # 模板利用Bootstrap中的樣式進行了修改Hello,{{ name }}!
塊名 | 說明 |
---|---|
doc | 整個HTML文檔 |
html_attribs | 標簽的屬性 |
html | 標簽中的內容 |
head | 標簽中的內容 |
title | |
metas | 一組標簽 |
styles | 層疊樣式表定義 |
body_attribs | 標簽的屬性 |
body | 標簽中的內容 |
navbar | 用戶定義的導航條 |
content | 用戶定義的頁面內容 |
scripts | 文檔底部的JavaScript聲明 |
利用Jinja2的模板繼承機制可以讓templates/base.html繼承自bootstrap/base.html。
{% extends "bootstrap/base.html" %} {% block title %}Flasky{% endblock %} {% block navbar %}{% endblock %} {% block content %}{% block page_content %}{% endblock %}{% endblock %}程序現在使用的模板繼承自templates/base.html不是直接繼承自Flask-Bootstrap的基模板。
404錯誤頁面:繼承自templates/base.html {% extends "base.html" %} {% block title %}Flasky - Page Not Found{% endblock %} {% block page_content %}鏈接{% endblock %} user頁面:繼承自templates/base.html {% extends "base.html" %} {% block title %}Flasky{% endblock %} {% block page_content %}Not Found
{% endblock %}Hello, {{ name }}!
Flask提供了url_for()輔助函數,它可以使用程序URL映射中保存的信息生成URL。
url_for函數最簡單的用法:以視圖函數名作為參數,返回對應的URL。url_for("index")得到的結果是"/"
使用url_for生成動態地址時,將動態部分作為關鍵字參數傳入。
url_for("user",name="john",_external=True)
函數能將任何額外參數添加到查詢字符串中。
靜態文件 使用Flask-Moment本地化日期和時間Flask-Moment是Flask的一個程序擴展,能夠在瀏覽器中渲染日期和時間。
安裝Flask-Moment
(venv)$ pip install flask-momenthello.py:初始化Flask-Moment
from flask_moment import Moment moment = Moment(app)templates/base.html: 引入 moment.js庫
{% block scripts %} {{ super() }} {{ moment.include_moment() }} {% endblock %}hello.py: 加入一個datetime變量
from date.time import datetime @app.route("/") def index(): return render_template("index.html",current_time=datetime.utcnow())templates/index.html: 使用Flask-Moment渲染時間戳
The local date and time is {{ moment(current_time).format("LLL") }}.
That was {{ moment(current_time).fromNow(refresh=True) }}.
本文由?EverFighting?創作,采用?**[知識共享署名 3.0 中國大陸許可協議]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38104.html
摘要:我們的論壇項目就使用了該框架。此外,麥子學院也有一個入門視頻教程,一共小時的視頻教程,涵蓋開發的方方面面,包括環境的搭建,語法介紹,項目結構的組織,全球化,單元測試等內容。博客地址更多閱讀的機制三個框架的對比 前面兩篇文章中我們已經了解 Web(HTTP)服務器,Web應用程序,Web框架,WSGI這些 Python Web 開發中的概念。我們知道,Web框架通過將不同Web應用程序中...
摘要:處理和函數之間關系的程序稱為路由。模板引擎是由實現的是內置的模板語言參照設計思想設計的,跟差不多渲染模板默認情況下,在程序文件夾中的子文件夾中尋找模板。如果需要可在文件夾中使用子文件夾存放文件。 1 程序的基本結構 1.1初始化 所有Flask 程序都必須創建一個程序實例。Web 服務器使用一種名為Web 服務器網關接口(Web Server Gateway Interface,WSG...
摘要:和是最受歡迎的。虛擬環境將允許將項目依賴項與本地機器依賴項隔離開來。文件將是項目中的主文件。運行后,檢查本地主機。在中創建一個名為的文件夾,并創建一個名為的文件夾。部署創建帳戶為前端和全棧應用程序提供免費部署服務。 ...
摘要:簡介官網上對它的定位是一個微開發框架。另外一個必須理解的概念是,簡單來說就是一套和框架應用之間的協議。功能比較豐富,支持解析自動防止攻擊繼承變量過濾器流程邏輯支持代碼邏輯集成等等。那么,從下一篇文章,我們就正式開始源碼之旅了 文章屬于作者原創,原文發布在個人博客。 flask 簡介 Flask 官網上對它的定位是一個微 python web 開發框架。 Flask is a micro...
摘要:示例如下靜態路由使用動態變量的路由未指定變量類型使用動態變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數參數傳入進來。 開始決定認真的在網上寫一些東西,主要原因還是在于希望能提升學習效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發現很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎開始,退回來好好看看官方文檔,再...
閱讀 1534·2023-04-26 02:50
閱讀 3535·2023-04-26 00:28
閱讀 1931·2023-04-25 15:18
閱讀 3209·2021-11-24 10:31
閱讀 986·2019-08-30 13:00
閱讀 1000·2019-08-29 15:19
閱讀 1766·2019-08-29 13:09
閱讀 2975·2019-08-29 13:06