国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Flask:模版_html/css

來源:懂視網 責編:小采 時間:2020-11-27 16:30:13
文檔

Flask:模版_html/css

Flask:模版_html/css_WEB-ITnose:在 Python 內部生成 HTML 不好玩,且相當笨拙。因為你必須自己負責 HTML 轉義,以 確保應用的安全。因此, Flask 自動為你配置的 Jinja2 模板引擎 。 渲染模版 render_template() 方法可以渲染模板,你只要提供模板名稱和你需要的參數作為參數傳遞給模板的
推薦度:
導讀Flask:模版_html/css_WEB-ITnose:在 Python 內部生成 HTML 不好玩,且相當笨拙。因為你必須自己負責 HTML 轉義,以 確保應用的安全。因此, Flask 自動為你配置的 Jinja2 模板引擎 。 渲染模版 render_template() 方法可以渲染模板,你只要提供模板名稱和你需要的參數作為參數傳遞給模板的

在 Python 內部生成 HTML 不好玩,且相當笨拙。因為你必須自己負責 HTML 轉義,以 確保應用的安全。因此, Flask 自動為你配置的 Jinja2 模板引擎 。

渲染模版

render_template() 方法可以渲染模板,你只要提供模板名稱和你需要的參數作為參數傳遞給模板的變量就行了。

例子:template.py

from flask import render_template@app.route('/hello/')@app.route('/hello/')def hello(name=None): return render_template('hello.html', name=name)

文件結構如下:

/template.py/templates /hello.html

Flask 會在 templates 文件夾內尋找hello.html模板。

模版放置在哪里

因此,如果你的應用是一個模塊,那么模板文件夾(templates)應該在模塊旁邊;如果是一個包,那么就應該在包里面:

情形 1: 一個模塊:

/application.py/templates /hello.html

情形 2: 一個包:(有 init .py)

/application /__init__.py /templates /hello.html

運行template.py

Jinja2 模板

官網

開發者文檔

模板包含 變量 或 表達式 ,這兩者在模板求值的時候 會被替換為值 。模板中 還有標簽,控制模板的邏輯。模板語法的大量靈感來自于 Django 和 Python 。

例子:

Hello from Flask{% if name %} 

Hello {{ name }}!

{% else %}

Hello World!

{% endif %}

3行:如果name為真,則顯示Hello + name參數

5行:否則顯示hello world

7行:結束判斷

注釋

多行

{# ... #}

單行

## 為行注釋前綴

去掉空白

模板引擎不會對空白做處理,空白(空格、制表符、換行符 等等)都會原封不動返回。

在塊(比如一個for 標簽、一段注釋或變量表達式)的開始或結束放置一個減號( - ),可以移除塊前或塊后的空白:標簽和減號之間不能有空白

有效的:

{%- if foo -%}...{% endif %}

無效的:

{% - if foo - %}...{% endif %}

行語句

使用 # 把一個行標記為一個語句,下面的兩段代碼等價

# for item in seq 
  • {{ item }}
  • # endfor{% for item in seq %}
  • {{ item }}
  • {% endfor %}

    1. 行語句前綴可以出現在一行的任意位置,只要它前面沒有文本。
    2. 為了語句有更好的可讀 性,在塊的開始(比如 for 、 if 、 elif 等等)以冒號結尾:
    3. 若有未閉合的圓括號、花括號或方括號,行語句可以跨越多行

    轉義

    不會把它作為變量或塊來處理。

    最簡單的方法是在變量分隔符中( {{ )使用變量表達式輸出:

    {{ '{{' }}

    較大的段落使用raw:

    {% raw %} {% for item in seq %} 
  • {{ item }}
  • {% endfor %} {% endraw %}

    變量

    Hello, {{ name }}!

    特殊的占位符告訴模版引擎該值在渲染模版的時候要從數據提供者那里拿到該數據。

    Jinja2可以識別所有變量的類型,甚至是一些復雜的數據類型,如lists,dic,objects.如:

    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() }}.

    變量上面也可以有你能訪問的屬性或元素。訪問變量屬性可以使用 . 或者 []

    {{ foo.bar }}{{ foo['bar'] }}

    變量可以被過濾器修改,通過管道|作為分隔符,過濾器放在后面

    Hello, {{ name|capitalize }}

    Jinja2常用的過濾器

    Filter名稱 描述
    safe 安全過濾器
    capitalize 值的第一個字符轉換為大寫,其余小寫
    lower 值全部轉化為小寫
    upper 值全部轉換為大寫
    title 值中的每個單詞大寫
    trim 將中間的空格移除
    striptags 在渲染之前刪除任何HTML標記

    安全過濾器:

    Hello

    Jinja2會將其渲染成: <h1>Hello</h1> 但有時候需要在變量中保存html的原始值,這時候就需要使用安全過濾器。不要在不信任的值上使用安全過濾器,如用戶在網頁上面提交的表單值。

    判斷

    所有的判斷函數

    {% if loop.index is divisibleby 3 %}

    控制流結構

    Jinja2提供了幾個控制流結構改變渲染模版的流。

    for

    {% for user in users %} 
  • {{ user.username|e }}
  • {% endfor %}

    迭代像 dict 的容器

    {% for key, value in my_dict.iteritems() %} {{ key|e }} {{ value|e }}{% endfor %}

    if

    宏macro

    過濾器filter

    賦值set

    包含include

    include 語句用于包含一個模板,并在當前命名空間中返回那個文件的內容渲 染結果

    模版繼承

    模板繼承可以使每個頁面的特定元素(如頁頭,導航,頁尾)保持一致。

    用內容填充空的block是子模板的工作。 {% block %}告訴模板引擎子模板可以覆蓋模板中的這些部分。

    同一個模板中 {% block %} 的名名稱必須唯一。

    一個基礎的模版:base.html

     {% block head %} {% block title %}{% endblock %} - My Webpage {% endblock %} {% block content %}{% endblock %} {% block footer %} © Copyright 2008 by you. {% endblock %} 

    子模版:{% extend %} 標簽告訴模板引擎這個模板“繼承”另一個模板。 extends 標簽應該是模板中的第一個 標簽。

    {% extends "base.html" %}{% block title %}Index{% endblock %}{% block head %} {{ super() }} {% endblock %}{% block content %} 

    Index

    Welcome on my awesome homepage.

    {% endblock %}

    重復使用塊,渲染塊的內容:使用 self.塊的名稱

    {% block title %}{% endblock %}

    {{ self.title() }}

    {% block body %}{% endblock %}

    super渲染父級塊

    {% block sidebar %} 

    Table Of Contents

    ... {{ super() }}{% endblock %}

    命名塊結束標簽

    Jinja2 允許你在塊的結束標簽中加入的名稱來改善可讀性:endblock 后面的名稱一定與塊名匹配。

    {% block sidebar %} {% block inner_sidebar %} ... {% endblock inner_sidebar %}{% endblock sidebar %}

    嵌套塊和作用域

    默認的塊不允許訪問塊外作用域中的變量,下面的li輸出為空,item 在塊中是不可用的,其原因是,如果 塊被子模板替換,變量在其塊中可能是未定義的或未被傳遞到上下文。

    {% for item in seq %} 
  • {% block loop_item %}{{ item }}{% endblock %}
  • {% endfor %}

    在塊聲明中添加 scoped 修飾,就把塊設定到作用域中:

    {% for item in seq %} 
  • {% block loop_item scoped %}{{ item }}{% endblock %}
  • {% endfor %}

    與Bootstrap集成

    bootstrap官網

    bootstrap是客戶端的模版,所以服務器不能直接調用它。服務器能夠做的就是提供HTML response,根據bootstrap需要的html,css,js關聯的組建。使用Flask-Bootstrap擴展來完成。

    安裝Flask-Bootstrap: pip install flask-bootstrap

    初始化Bootstrap

    Flask擴展的初始化一般都是在app實例創建的同時實行。

    from flask.ext.bootstrap import Bootstrap# ...bootstrap = Bootstrap(app)

    下面展示新的繼承模版

    {% extends "bootstrap/base.html" %}{% block title %}Flasky{% endblock %}{% block navbar %}  Flasky 
  • Home
  • {% endblock %}{% block content %}

    Hello, {{ name }}!

    {% endblock %}

    定義了三個block,title, navbar, 和content.在這個模版中navbar block定義了一個簡單的導航bar使用bootstrap組建。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Flask:模版_html/css

    Flask:模版_html/css_WEB-ITnose:在 Python 內部生成 HTML 不好玩,且相當笨拙。因為你必須自己負責 HTML 轉義,以 確保應用的安全。因此, Flask 自動為你配置的 Jinja2 模板引擎 。 渲染模版 render_template() 方法可以渲染模板,你只要提供模板名稱和你需要的參數作為參數傳遞給模板的
    推薦度:
    標簽: 模板 html css
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久热精品视频 | 亚洲欧美另类自拍第一页 | 国产精品久久久久9999 | 91久久精品国产免费一区 | 国产视频最新 | 亚洲 欧洲 另类 综合 自拍 | 国产高清特黄无遮挡大片 | 国产精品久久久久久久久久久久 | 韩日一区二区 | 在线观看精品一区 | 中文字幕有码在线播放 | 国产精品原创视频 | 国产午夜视频在线 | 精品一区二区三区在线播放 | 国产小视频在线免费观看 | 性刺激欧美三级在线现看中文 | 国产欧美日韩亚洲 | 免费观看成人www精品视频在线 | 国模沟沟一区二区三区 | 国产网站精品 | 亚洲一二三区在线观看 | 日本不卡在线观看 | 在线精品免费视频 | 亚洲欧美综合区自拍另类 | 国产资源一区 | 不卡一区二区在线观看 | 国产热久久精 | 成人免费国产欧美日韩你懂的 | 国偷自产一区二区免费视频 | xxxx性xx另类| 国产免费一区二区 | 欧美高清视频在线观看 | 亚洲一区二区三区四区在线观看 | 国产一区二区高清视频 | 国产精品手机视频一区二区 | 亚洲欧美日韩综合精品网 | 国内精品视频 | 欧美一区二区三区在线播放 | 国产精品特级毛片一区二区三区 | 欧美日韩一区二区在线 | 欧美韩日 |