中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解flask入門模板引擎

發布時間:2020-09-09 07:40:31 來源:腳本之家 閱讀:130 作者:rottengeek 欄目:開發技術

模板引擎

說明:模板文件就是按照一定的規則書寫的展示效果的HTML文件 模板引擎就是負責按照指定規則進行替換的工具

模板引擎選擇jinja2

一、渲染模板的方法

1、將渲染的模板進行返回

render_template()

2、渲染字符串返回

render_templates_string()

實例

@app.route('/')
def index():
  #將模板內容響應給用戶
  return render_template('index.html')
  #渲染一內容響應給用戶
  return render_template_string('<h2 >原諒色</h2>')

二、模板的語法

模板中只存在倆種語法

1、變量

{{ var }}

#像模板文件中傳參
return render_template('index.html',title='首惡')
{{ title }}

2、標簽

{% 標簽名 %}

注意:

在模板中使用字典中的鍵 需要像使用對象得方式來調用

{{data.key}}

如果在模板中給定的變量不存在 則插入的是空字符串 不會報錯

三、過濾器

過濾器使用管道符 | 來使用的

1、{{ var|abs }} 返回一個數值的絕對值

2、default 設置默認值

只有當給定的變量不存在時 則執行默認值

當設置default的boolean的時候 會執行默認值

<li>{{ data.bool|default('我是默認值',boolean=True) }}</li>

3、first: 取出變量中的第一個字符

4、last: 取出變量中的最后一個字符

5、format: 字符的格式化

<li>{{ '我叫%s 我今年%d歲了 我的存款為 %.2f'|format('羅鐵漢',38,23) }}</li>

6、length: 返回變量值的長度

7、join: 拼接成字符串

<li>{{ [1,2,3,4]|join('') }}</li>
<li>{{ [1,2,3,4]|join('x') }}</li>

8、safe: 不轉義標簽 原樣顯示

9、lower 轉為小寫

10、upper 轉為大寫

11、replace 替換

<li>{{ data.string|replace('a','x') }}</li>

12、striptages 去除HTML標簽

{{ data.html|striptags }}

四、標簽

語法格式 :{% 標簽名 %}

(1) if

實例

{% if data.bool %}
    <li>{{ data.bool }}值為真</li>
{% elif True %}
    <li>{{ True }}職位真</li>
{% else %}
    <li>{{ data.bool }}值為假</li>
{% endif %}

(2) for 循環

實例

{% for i in data.xxxx %}
{# 錯誤的迭代方法TypeError: 'bool' object is not iterable #}
{#  {% for i in data.bool %}#}
    <li>{{ i }}</li>
{% else %}
    <li>當迭代的變量不存在時 則執行else</li>
{% endfor %}

注意:

break continue 不能夠在這里使用

迭代字典

{% for k,v in data.items() %}
   <li>{{ k }}=>{{ v }}</li>
{% endfor %}

獲取當前迭代的狀態

變量 描述
loop.index 獲取當前迭代的索引 從1開始
loop.index0 獲取當前迭代的索引 從0開始
loop.first 是否為第一次迭代
loop.last 是否為最后一次迭代
loop.length 迭代的長度

六、注釋

{# 多行注釋 #}

七、文件包含 include

相當于把一個文件 拷貝到當前的你的包含的位置

實例

{% include 'common/header.html' %}
<div>我是中間的內容</div>
{% include 'common/footer.html' %}

注意:

1、包含的公共的文件中 只存放 公共的代碼 除此以外什么都不要存在

2、導入的時候 如果文件和在同一級別 直接導入就可以 如果包含在某個目錄中 需要寫出路徑

{% include 'common/header.html' %}
{% include 'test.html' %}

八、宏 macro

概念: 類似python中的函數

實例

在macro.html中

{% macro input(name,type='text',value='') %}
  <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

宏的調用

{{ input('text','username','') }}
{{ input() }} 
{{ input(type='password',name='userpass') }}

宏的導入

(1) import

{% import 'test.html' as test %}
{% import 'common/test.html' as test %}
<p>用戶名: {{ test.input(type='password',name='userpass') }}</p>

(2) form import

{% from 'test.html' import input %}
{% from 'common/test.html' import input %}
<p>用戶名: {{ input(type='password',name='userpass') }}</p>

注意:

  1. 宏的調用只能在定義的下方去調用 否則未定義
  2. 宏如果存在形參 且沒有默認值 則可以調用(沒意義)
  3. 形參的默認值 需要遵循默認值規則 有默認值的參數 放右側
  4. 可以正常使用 關鍵字參數

九、繼承 extends

語法:

  1. {% extends %} 繼承某個模板
  2. {% block %} 挖坑和填坑
  3. {{ super() }} 調用被替換掉的代碼

base.html

<!DOCTYPE html>
<html lang="en">
<head>
{% block header %}
  <meta charset="UTF-8">
  {% block meta %}
  {% endblock %}
  <title>{% block title%}首頁{% endblock %}</title>
  <style>
    {% block style %}
      p{color:red;}
    {% endblock %}
  </style>
  {% block link %}
  {% endblock %}
  {% block script %}
  {% endblock %}
{% endblock %}
</head>
<body>
<header>頭部</header>
{% block con %}
  我是中間的內容部分
{% endblock %}
<footer>尾部</footer>
</body>
</html>

index.html繼承 base.html

{% extends 'common/base.html' %}
{% block title %}
我的首頁
{% endblock %}
{% block style %}
  {{ super() }}
  p{color:green;}
{% endblock %}
{% block con %}
<p>我是首頁的內容</p>
  我是首頁的內容
{% endblock %}

注意:

如果當替換某個樣式的時候 所有原來的樣式 都消失了 去查看是否使用了super()

十、flask-bootstrap

安裝

pip install flask-bootstrap

sudo pip3 install flask-bootstrap

使用

繼承 bootstrap/base.html 基礎模板 改造成適用于自己網站的base.html基礎模板

自己的base.html

{% extends 'bootstrap/base.html' %}
{% block navbar %}
  <nav class="navbar navbar-inverse" >
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
            data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span class="glyphicon glyphicon-signal" aria-hidden="true"></span></a>
      </div>

      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav">
          <li class="active"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首頁 <span class="sr-only">(current)</span></a></li>
          <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >發帖子</a></li>

        </ul>

        <ul class="nav navbar-nav navbar-right">
          <form class="navbar-form navbar-left">
          <div class="form-group">
            <input type="text" class="form-control" placeholder="Search">
          </div>
          <button type="submit" class="btn btn-default">Submit</button>
        </form>
          <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >注冊</a></li>
          <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登錄</a></li>
          <li class="dropdown">
            <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
              aria-expanded="false">個人中心 <span class="caret"></span></a>
            <ul class="dropdown-menu">
              <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >個人信息</a></li>
              <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >修改頭像</a></li>
              <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >修改密碼</a></li>
              <li role="separator" class="divider"></li>
              <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Separated link</a></li>
              <li role="separator" class="divider"></li>
              <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >退出登錄</a></li>
            </ul>
          </li>
        </ul>
      </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
  </nav>
{% endblock %}
{% block content %}
  <div class="container">
    {% block pagecontent %}
      網頁的中間內容部分寫在當前的位置
    {% endblock %}
  </div>
{% endblock %}

使用 index.html

{% extends 'common/base.html' %}
{% block title %}
首頁
{% endblock %}

十一、錯誤頁面的定制

manage.py

@app.errorhandler(404)
def page_not_found(e):
  return render_template('common/error.html',error=e,code=404)

@app.errorhandler(500)
def server_error(e):
  return render_template('common/error.html',error=e,code=500)
error.html
{% extends 'common/base.html' %}
{% block title %}
  {{ code }}錯誤
{% endblock %}
{% block pagecontent %}
  <div class="alert alert-danger" role="alert">{{ error }}</div>
{% endblock %}

十二、視圖傳遞多個參數

(1) 原始傳參

@app.route('/')
def index():
  return render_template('index.html',arg1=1,arg2=2...)

(2) 使用字典

@app.route('/')
def index():
  return render_template('index.html',arg={arg1:1,arg2:2...})
  kwarg={arg1:1,arg2:2...}
  return render_template('index.html',``)

(3) 使用全局變量g

@app.route('/')
def index():
  g.name = '張三'
  g.age = 18
  return render_template('index.html')

模板中

  <ol>
    <li>{{ g.name }}</li>
    <li>{{ g.age }}</li>
  </ol>

(4) 使用 **locals()

@app.route('/')
def index():
  name = '張三'
  age = 18
  print(locals())
  return render_template('index.html',**locals())

模板中

<li>{{ name }}</li>
<li>{{ age }}</li>

十三、url_for 構造絕對的鏈接地址

@app.route('/test/')
def test():
  print(url_for('index',_external=True))
  return 'test'

十四、加載靜態資源

靜態資源:圖片,css,js,視頻,音頻,,

實例

<img src="{{ url_for('static',filename='img/17.jpg') }}" alt="">

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙陵县| 碌曲县| 密云县| 扶风县| 金寨县| 江北区| 昌宁县| 嘉祥县| 乐山市| 汝南县| 高密市| 襄城县| 商都县| 台中市| 疏附县| 惠州市| 黄浦区| 杭锦后旗| 蓬安县| 鄂托克旗| 遵义市| 二手房| 镇远县| 晋中市| 武城县| 昌都县| 广西| 新沂市| 台江县| 龙里县| 荃湾区| 双柏县| 牟定县| 凭祥市| 天柱县| 邹城市| 滨海县| 宁城县| 墨脱县| 许昌县| 晋州市|