3. 模板變量及模板過濾器

1.模板路徑的查找

  • 查找順序
    • 首先會在根目錄下的templates文件夾下面查找
    • 之后會在已注冊的app中的templates文件夾下面查找
    • 只要找到一個符合的模板,就返回
  • 兩種方案
    • 項目部署
    • app復(fù)用

2.靜態(tài)頁面烟馅,動態(tài)頁面

  • 靜態(tài)頁面:無法變化,
  • 動態(tài)頁面:根據(jù)交互的不同會進行變化

3.渲染機制

  • 可以將模板變量渲染進入頁面
class Index(View):
    def get(self, request):
        now = datetime.now()
        return render(request, 'index/home.html', context={
            'now': now
        })
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>主頁</title>
</head>
<body>
<h1>我是主頁</h1>
<h4>當(dāng)前時間是:{{ now }}</h4>
</body>
</html>

4.模板變量

  • 語法
    1. 語法: {{ 變量名 }}
    2. 命名由字母和數(shù)字以及下劃線組成欺缘,不能有空格和標(biāo)點符號
    3. 可以使用字典、模型、方法、函數(shù)傍念、列表
    4. 不要和python或django關(guān)鍵字重名
    5. 變量和查找
  • 變量的解析規(guī)則
    1. 計算變量,將其替換為結(jié)果
    2. 遇到點(.)的時候葛闷,按一下順序查找:
      • 字典鍵值查找
      • 屬性或方法查找
      • 數(shù)字索引查找
    3. 如果結(jié)果是可調(diào)用的,則調(diào)用它時不帶參數(shù)双藕。調(diào)用的結(jié)果成為模板的值
      • 所謂的結(jié)果是可調(diào)用的淑趾,說明變量是不帶參數(shù)個函數(shù),或是個方法
    4. 渲染失敗返回: ''
class Fruits:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    def food(self):
        return '水果也是食物哦'

class Index(View):
    def get(self, request):
        now = datetime.now()
        list1 = [1,2,3]
        dict1 = {'name': '劉威', 'age': 18}
        dict2 = {'name': '劉威', 'age': 18, 'items':'abc'}
        def func():
            return '我是一個無參數(shù)的可調(diào)用函數(shù)'
        fruit = Fruits('apple', 'red')
        return render(request, 'index/home.html', context={
            'now': now,
            'list1':list1,
            'dict1': dict1,
            'dict2': dict2,
            'func':func,
            'fruit':fruit,
        })
<body>
<h4>變量調(diào)用:{{ now }}</h4>
<h4>列表調(diào)用:{{ list1}}</h4>
<h4>列表值調(diào)用:{{ list1.2}}</h4>
<h4>字典調(diào)用:{{ dict1 }}</h4>
<h4>字典key調(diào)用:{{ dict1.name }}</h4>
<h4>字典方法調(diào)用:{{ dict2.items }}</h4>
<h4>函數(shù)調(diào)用:{{ func }}</h4>
<h4>類對象調(diào)用:{{ fruit }}</h4>
<h4>類對象屬性調(diào)用:{{ fruit.name }}</h4>
<h4>類對象方法調(diào)用:{{ fruit.food }}</h4>
</body>
模板變量.png

5.模板過濾器 filter

  • 作用:對變量進行過濾忧陪。在真正渲染出來之前扣泊,過濾器會根據(jù)功能處理好變量,然后得出結(jié)果后再替換掉原來的變量展示出來

    • 語法:{{fruits|lower}}
  • 鏈?zhǔn)秸{(diào)用:比如實現(xiàn)一個功能嘶摊,先把所有字符變成小寫延蟹,把第一個字符轉(zhuǎn)換成大寫

    • 語法:{{fruits|lower|capfirst}}
  • 使用參數(shù):過濾器可以使用參數(shù),在過濾器名稱后面使用冒號”:”再加上參數(shù)叶堆,比如要把一個字符串中所有的空格去掉阱飘,則可以使用cut過濾器

    • 語法如下: {{fruits|cut:" "}}
    • 注意:使用參數(shù)的時候,冒號和參數(shù)之間不能有任何空格,一定要緊挨著
  • 常用模板過濾器

    • add 將參數(shù)與值相加 首先嘗試轉(zhuǎn)換成整數(shù)相加沥匈,失敗蔗喂,則嘗試字符串,列表相加等高帖。{{ value|add:"2" }}
    • capfirst 首字母大寫缰儿,如果第一個字母不是字母則不起作用。{{ value|capfirst }}
    • date 日期格式化 {{ value|date:"D d M Y" }}
    • time 時間格式化 {{ value|time:"H:i" }} 格式化格式見官方文檔:https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#date
    • default 如果變量解析失敗散址,使用給定的默認(rèn)值乖阵。{{ value|default:"nothing" }}(注意如果value是''空字符串,輸出將會是'nothing')
    • first 返回列表的第一個元素 {{ value|first }}
    • last 返回列表的最有一個元素 {{ value|last }}
    • slice 返回一個列表的切片 {{ some_list|slice:":2" }}预麸,前閉后開
    • join 連接字符串列表 與str.join(list)一樣 {{ value|join:" // " }}
    • floatformat 浮點數(shù)格式化 不指定小數(shù)位參數(shù)瞪浸,默認(rèn)保留一個為小數(shù)
    • length 返回字符串或列表的長度
    • length_is 判斷字符串或列表長度是否指定的值,相等返回True {{ value|length_is:"4" }}
    • lower 字符串中的字母都變小寫{{ value|lower }}
    • upper 字符串中的字母都變大寫{{ value|upper }}
    • safe 關(guān)閉變量的自動轉(zhuǎn)義师崎,使html標(biāo)簽生效{{ value|safe }}
    • title 標(biāo)題化默终,首字母大寫 {{ value|title }}
    • truncatechars 根據(jù)后面給的參數(shù),截斷字符犁罩,如果超過了用...表示
    • truncatewords 同truncatechars齐蔽,不過這個一個以單詞為單位,進行截斷
      以上兩個針對html床估,會截斷標(biāo)簽中的字符含滴,而不會截斷標(biāo)簽
    • striptags 去掉所有的html標(biāo)簽
  • xss 跨域腳本攻擊

class Index(View):
    def get(self, request):
        # 用js寫個死循環(huán)alert(1), 在渲染到前端,有興趣的可以試試
        js= '<script>alert(1)</script>'
        return render(request, 'index/home.html', context={
            'js':js
        })

<body>
<p>{{ js|safe }}</p>
</body>

6.靜態(tài)文件(static:css js image)

  • 路徑配置
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
  • 靜態(tài)文件的引入
{# index.html #}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>主頁</title>
  <link rel="stylesheet" href="{% static 'css/index/index.css' %}">
</head>
<body>
<p>我是紅色</p>
</body>
</html>
/* index.css */
p{
    color: red;
}
  • 訪問
# index.views.py
from django.views import View
from django.shortcuts import render,


class Index(View):
    def get(self, request):

        return render(request, 'index/home.html')
# index/urls.py
from django.views import View
from django.shortcuts import render,


class Index(View):
    def get(self, request):

        return render(request, 'index/home.html')

7.Bootstrap套用舉例

image.png
image.png
image.png
image.png
image.png

再獲取網(wǎng)頁源代碼丐巫,以及相應(yīng)css文件谈况,導(dǎo)入到我們的項目中,進行代碼設(shè)計


image.png
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標(biāo)簽*必須*放在最前面递胧,任何其他內(nèi)容都*必須*跟隨其后碑韵! -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>Signin Template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link  rel="stylesheet">
    <!-- Custom styles for this template -->
    <link href="{% static 'css/login/login.css' %}" rel="stylesheet">
  </head>

  <body>

    <div class="container">
      <form class="form-signin">
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="inputEmail" class="sr-only">Email address</label>
        <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <div class="checkbox">
          <label>
            <input type="checkbox" value="remember-me"> Remember me
          </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
      </form>

    </div> <!-- /container -->
  
  </body>
</html>
body {
  padding-top: 40px;
  padding-bottom: 40px;
  background-color: #eee;
}

.form-signin {
  max-width: 330px;
  padding: 15px;
  margin: 0 auto;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
  margin-bottom: 10px;
}
.form-signin .checkbox {
  font-weight: normal;
}
.form-signin .form-control {
  position: relative;
  height: auto;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
  padding: 10px;
  font-size: 16px;
}
.form-signin .form-control:focus {
  z-index: 2;
}
.form-signin input[type="email"] {
  margin-bottom: -1px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
  margin-bottom: 10px;
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}
class Login(View):
    def get(self, request):
        return render(request, 'login/login.html')
urlpatterns = [
    path('login/', views.Login.as_view(), name='login'),
]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缎脾,隨后出現(xiàn)的幾起案子祝闻,更是在濱河造成了極大的恐慌,老刑警劉巖遗菠,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件联喘,死亡現(xiàn)場離奇詭異,居然都是意外死亡辙纬,警方通過查閱死者的電腦和手機豁遭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贺拣,“玉大人蓖谢,你說我怎么就攤上這事捂蕴。” “怎么了蜈抓?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵启绰,是天一觀的道長。 經(jīng)常有香客問我沟使,道長委可,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任腊嗡,我火速辦了婚禮着倾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燕少。我一直安慰自己卡者,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布客们。 她就那樣靜靜地躺著崇决,像睡著了一般。 火紅的嫁衣襯著肌膚如雪底挫。 梳的紋絲不亂的頭發(fā)上恒傻,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音建邓,去河邊找鬼盈厘。 笑死,一個胖子當(dāng)著我的面吹牛官边,可吹牛的內(nèi)容都是我干的沸手。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼注簿,長吁一口氣:“原來是場噩夢啊……” “哼契吉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诡渴,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤栅隐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玩徊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谨究,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年恩袱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胶哲。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡畔塔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澈吨,我是刑警寧澤把敢,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站谅辣,受9級特大地震影響修赞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桑阶,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一柏副、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚣录,春花似錦割择、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虐杯,卻和暖如春玛歌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厦幅。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工沾鳄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人确憨。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓译荞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親休弃。 傳聞我的和親對象是個殘疾皇子吞歼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • 聲明:轉(zhuǎn)載請注明出處http://www.reibang.com/p/1664dcfd840c 最近在折騰Djan...
    蛇發(fā)女妖閱讀 6,267評論 1 10
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常塔猾。 O...
    我想起個好名字閱讀 5,249評論 0 9
  • R-閱讀原文 心理學(xué)家把發(fā)展或增強某種技術(shù)和能力的意愿稱作“精熟目標(biāo)”篙骡。當(dāng)人們在追求精熟目標(biāo)時,他們不因是否達(dá)到特...
    cy_alice閱讀 247評論 0 0
  • 往來奔波丈甸,苦 也為心頭糯俗,喜 161014 不前。良.田.路:幸呼睦擂!哀 呼得湘。
    青衫濕舊閱讀 184評論 8 13