欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flask框架渲染Jinja模板與傳入模板變量操作詳解

 更新時間:2020年01月25日 09:57:25   作者:stu_xujin  
這篇文章主要介紹了flask框架渲染Jinja模板與傳入模板變量操作,結(jié)合實例形式詳細分析了flask框架模板相關(guān)原理、模板渲染、傳入?yún)?shù)等相關(guān)操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了flask框架渲染Jinja模板與傳入模板變量操作。分享給大家供大家參考,具體如下:

1. 模板簡介

模板是一個web開發(fā)中必備的模塊,因為我們在渲染一個網(wǎng)頁的時候,并不只是渲染了一個純文本字符竄,而是渲染一個有富文本標簽的頁面,這個時候我們就需要用到模板了。在flask中,配套的模板是Jinja2,Jinja2的作者也是flask的作者。

2. flask中渲染模板

在flask中,如果我們需要渲染一個模板,那么我們就需要用到render_template這個方法了。

在我們新建一個flask項目的時候,會同時生成一個templates的文件夾,然后我們就在里面新建一個index.html的文件。然后寫入測試代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
 <h1>index</h1>
</body>
</html>

然后我們在app.py文件中寫一個視圖函數(shù)渲染我們的index.html文件。

from flask import render_template
@app.route('/index/')
def index():
  return render_template('index.html')

這樣,我們就成功的對html頁面進行了渲染。然后我們運行項目,輸入網(wǎng)址就能夠查看到效果了。

3. flask中模板文件查找路徑

在上面的render_template函數(shù)中,為什么我們直接寫入index.html,flask就會知道去templates文件夾里面去找這個文件呢。而不是去其他位置查找index.html文件呢。這是因為在flask中,默認的查找模板路勁就在項目的根目錄下面的templates文件夾。所以當(dāng)我們寫模板文件的時候,都會寫在templates下面。

在flask中,我們也是可以修改模板的存放位置的,比如我們將模板文件存放位置修改為E:\templates,那么我們就可以這樣寫。

from flask import Flask,render_template
app = Flask(__name__,template_folder=r'E:\templates')

這樣,flask每次查找模板文件路徑的時候,就回去這個文件夾下面尋找,如果沒有找到,就會報一個jinja2.exceptions.TemplateNotFound的錯誤,所以,當(dāng)我們遇到了這個錯誤的時候,我們就要知道是哪個位置出問題了。

4. 模板中傳入?yún)?shù)

在一個模板中,我們不可避免的會傳入一些參數(shù),那么在flask中,應(yīng)該怎樣闖入?yún)?shù)呢。

首先編寫一個視圖,然后在render_template中傳入一個關(guān)鍵字參數(shù),例如下面的username=‘xxx'

from flask import render_template
@app.route('/index/')
def index():
  return render_template('index.html',username='xxx')

然后我們在模板中怎樣使用這個變量呢?我們在index.html中寫入以下代碼

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
 <h1>index</h1>
 <p>userneme: {{ username }}</p>
</body>
</html>

所以,我們在模板中通過 {{ username }}就可以拿到我們沖視圖中傳入的值了。也就是說,在Jinja2模板中,是通過{{ 變量名 }}來獲取數(shù)據(jù)的,如果我們在{{ }}中傳入了一個視圖并沒有穿給我們的變量,那么也不會報錯,只是什么都不顯示而已。

如果我們需要傳入多個參數(shù),只需要依次在render_template函數(shù)中傳入我們的關(guān)鍵之參數(shù)就可以了。
示例:

return render_template('index.html',username='xxx',age=18,...)

但是如果我們參數(shù)很多的話,那么這樣我們也不方便我們管理和查看,這個時候我們就可以換一種方式了,定義一個字典,來存放所有的變量,然后在傳入模板中

示例:

@app.route('/index/')
def index():
 context = {
 'username':'xxx',
 'age':18,
 'height':180,
 }
  return render_template('index.html',context=context)

但是這個時候,當(dāng)我們在模板找中直接輸入{{ username }},{{ age }}, {{ height }}的時候,是獲取不到我們的數(shù)據(jù)的,因為我們使用這種方法的話,在模板中,獲取參數(shù)就需要改變一下方式了。變成下面這樣.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
 <h1>index</h1>
 <p>userneme: {{ context.username }}</p>
 <p>userneme: {{ context['age'] }}</p>
 <p>userneme: {{ context.height }}</p>
</body>
</html>

在上面模板中,我們使用了兩種方式得到參數(shù),context['username']和context.username。因為context是一個字典,所以使用這兩種方法都是可以的。

但是這樣我們?nèi)匀挥X得不方便,每次都需要通過context才能獲取到我們傳入的參數(shù)。那么我們可不可以不通過context才能獲取參數(shù)呢,答案是可以的。

實例:

@app.route('/index/')
def index():
 context = {
 'username':'xxx',
 'age':18,
 'height':180,
 }
  return render_template('index.html',**context)

我們在視圖函數(shù)中這樣寫,我們就需要通過context才能得到我們的參數(shù)了。

**context其實就是將這個字典打撒開來,形成關(guān)鍵字參數(shù)。所以,他和下面這種寫法是完全一樣的。

@app.route('/index/')
def index():
  return render_template('index.html',username='xxx',age=18,height=180)

一般我們在項目的開發(fā)中,我們都是使用**context這種寫法。

當(dāng)然,在我們的實際開發(fā)中,傳送的數(shù)據(jù)肯定不是這么簡單,一般都有數(shù)據(jù)嵌套之類的,還有對象。
例如下面這樣:

# 定義一個Person類
class Person():
  def __init__(self,name,age):
    self.name = name
    self.age = age
person = Person('小明', 18) # 實例化一個Person對象
@app.route('/')
def index():
  context = {
    'username':'xujin',
    'age':18,
    'children':{
      'name':'hah',
      'height':190,
    },
    'person':person,
    'list':[1,2,3]
  }
  return render_template('index.html',**context)

其實在Jinja2模板中,我們對數(shù)據(jù)的操作和在python都是差不多的,像上面這種數(shù)據(jù),我們就可以通過下面的方式來獲取。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
<h1>index</h1>
hello {{ username }}
<p> {{ children.name}} </p>
<p> {{ children['height'] }} </p>
{{ person }}
{{ person.name }}
{{ person.age }}
{{ list }}
{{ list[1] }}
</body>
</html>

5. url_for的使用

在模板中,我們一般也少不了需要url地址,而我們直接手動寫入url地址的話,不方便我們后面的管理,所以一般我們都會使用url_for函數(shù)構(gòu)造我們的url。

比如我們有一個login頁面,然后我么需要從首頁點擊登錄之后,就跳轉(zhuǎn)至login頁面,那么我們需要這樣做。

@app.route('/login/')
def login():
  return "這是login頁面"
@app.route('/index/')
def login():
  return render_template('index.html')

然后我們在index.html中寫入

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
<h1>index</h1>
<p><a href="/login/" rel="external nofollow" >登陸</a></p>
<p><a href="{{ url_for('login') }}" rel="external nofollow" >登陸</a></p>
</body>
</html>

上面兩種方式一種是直接寫死url的方式,一種就是使用url_for的的方式。一般我們都是會使用url_for這種方式的。

如果我們的url需要參數(shù),那么其實和在視圖中傳入?yún)?shù)是一樣的。

示例:

@app.route('/user/<int:user_id>/')
def user(user_id):
 return "user id is %s " % user_id

模板文件中寫入

<a href="{{ url_for('user',user_id=1,next='xxx') }}" rel="external nofollow" >user</a>
<!-- 等價于下面這樣 -->
<a href="/user/1/?next=xxx" rel="external nofollow" >user</a>

希望本文所述對大家基于flask框架的Python程序設(shè)計有所幫助。

相關(guān)文章

  • numpy.std() 計算矩陣標準差的方法

    numpy.std() 計算矩陣標準差的方法

    今天小編就為大家分享一篇numpy.std() 計算矩陣標準差的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python必考的5道面試題集合

    Python必考的5道面試題集合

    這篇文章介紹了Python必考的5道面試題,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié)

    Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié)

    將PDF文件轉(zhuǎn)換為Word文檔的過程通常需要使用一些外部庫來實現(xiàn),因為Python本身并不直接支持這種轉(zhuǎn)換,這篇文章主要介紹了Python?PDF轉(zhuǎn)化wolrd代碼的寫法小結(jié),需要的朋友可以參考下
    2024-06-06
  • python openssl模塊安裝及用法

    python openssl模塊安裝及用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python openssl模塊安裝及用法,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python中字典常用操作的示例詳解

    Python中字典常用操作的示例詳解

    字典是Python必用且常用的數(shù)據(jù)結(jié)構(gòu),本文主要為大家梳理了一下常用的字典操作:初始化、合并字典、字典轉(zhuǎn)Pandas等,需要的可以參考一下
    2022-05-05
  • Python Playwright安裝和基本使用問題記錄

    Python Playwright安裝和基本使用問題記錄

    這篇文章主要介紹了Playwright安裝和基本使用問題記錄,playwright是一款新型的自動化測試工具,功能非常強大,有很多優(yōu)點,缺點就是使用的人比較少,本文通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Django 如何實現(xiàn)文件上傳下載

    Django 如何實現(xiàn)文件上傳下載

    這篇文章主要介紹了Django 如何實現(xiàn)文件上傳下載,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下
    2021-04-04
  • Python實現(xiàn)將長圖制作成一個視頻

    Python實現(xiàn)將長圖制作成一個視頻

    這篇文章主要為大家詳細介紹了Python如何實現(xiàn)將一個長圖制作成一個視頻,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • 詳解python如何根據(jù)參數(shù)不同調(diào)用不同的類和方法

    詳解python如何根據(jù)參數(shù)不同調(diào)用不同的類和方法

    這篇文章主要為大家詳細介紹了在python中如何根據(jù)參數(shù)不同調(diào)用不同的類和方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法

    python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法

    這篇文章主要介紹了python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論