模板

模板

作為Web框架,Django提供了模板,用于編寫html代碼,還可以嵌入模板代碼更快更方便的完成頁面開發(fā),再通過在視圖中渲染模板,將生成最終的html字符串返回給客戶端瀏覽器。模版致力于表達外觀,而不是程序邏輯。模板的設計實現(xiàn)了業(yè)務邏輯view與顯示內容template的分離,一個視圖可以使用任意一個模板,一個模板可以供多個視圖使用。

模板包含兩部分:

靜態(tài)部分,包含html、css、js。

動態(tài)部分,就是模板語言。

Django模板語言,簡寫DTL,定義在django.template包中。 創(chuàng)建項目后,在"項目名稱/settings.py"文件中定義了關于模板的配置。


views.py中

from django.shortcuts import render

ef runoob(request):
  # 字符串
  views_name = "python教程"
  # 列表
  views_list = ["教程1","教程2","教程3"]
  # 字典
  views_dict = {"name":"教程"}
   views_dict = {"name":"[教程1','教程2','教程3']"}
  return  render(request,"runood.html", {"name":views_name,"views_list":views_list,"views_dict":views_dict})

runood.html

<p>{{ name }}</p>
<p>{{ views_list }}</p>   # 取出整個列表
<p>{{ views_list.0 }}</p> # 取出列表的第一個元素
<p>{{ views_dict }}</p>
<p>{{ views_dict.name }}</p>

過濾器

模板語法:

{{ 變量名 | 過濾器:可選參數(shù) }}
模板過濾器可以在變量被顯示前修改它,過濾器使用管道字符

過濾管道可以被* 套接* ,既是說,一個過濾器管道的輸出又可以作為下一個管道的輸入:

{{ my_list|first|upper }}  將第一個元素并將其轉化為大寫。
|safe 可以將亂碼轉化為字符串進行顯示

length

返回對象的長度,適用于字符串和列表。

字典返回的是鍵值對的數(shù)量,集合返回的是去重后的長度。

{{ name|length}}

filesizeformat

以更易讀的方式顯示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)。

字典返回的是鍵值對的數(shù)量,集合返回的是去重后的長度

from django.shortcuts import render

def runoob(request):
    num=1024
    return render(request, "runoob.html", {"num": num})
    
    
{{ num|filesizeformat}}    

date

根據(jù)給定格式對一個日期變量進行格式化。

格式 Y-m-d H:i:s返回 年-月-日 小時:分鐘:秒 的格式時間。

 **from** django.shortcuts **import** render

**def** runoob(request):
  **import** datetime
  now  =datetime.datetime.now()
  **return** render(request, "runoob.html", {"time": now}) 

 {{ time|date:"Y-m-d" }} 

模板標簽

if/else 標簽
基本語法格式如下:

{% if num1 > 20 %}
{{ num1 }}
{% else  %}
no
{% endif  %}
{% for list0 in list1 %}
{{ list0 }}
{% endfor %}




{% if condition %}
     ... display
{% endif %}
或者:

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}
根據(jù)條件判斷是否輸出。if/else 支持嵌套。

{% if %} 標簽接受 and , or 或者 not 關鍵字來對多個變量做判斷 ,或者對變量取反( not ),例如:

{% if athlete_list and coach_list %}
     athletes 和 coaches 變量都是可用的。
{% endif %}
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render

def runoob(request):
    views_num = 88
    return render(request, "runoob.html", {"num": views_num})
HelloWorld/templates/runoob.html 文件代碼:
{%if num > 90 and num <= 100 %}
優(yōu)秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
一邊玩去~
{% endif %}
再訪問訪問 http://127.0.0.1:8000/runoob,可以看到頁面:



for 標簽
{% for %} 允許我們在一個序列上迭代。

與 Python 的 for 語句的情形類似,循環(huán)語法是 for X in Y ,Y 是要迭代的序列而 X 是在每一個特定的循環(huán)中使用的變量名稱。

每一次循環(huán)中,模板系統(tǒng)會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。

例如,給定一個運動員列表 athlete_list 變量,我們可以使用下面的代碼來顯示這個列表:
<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render

def runoob(request):
    views_list = ["教程","教程1","教程2","教程3",]
    return render(request, "runoob.html", {"views_list": views_list})
HelloWorld/templates/runoob.html 文件代碼:
{% for i in views_list %}
{{ i }}
{% endfor %}

模板繼承

模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發(fā)人員的工作量。

典型應用:網(wǎng)站的頭部、尾部信息。
3.1、父模板

如果發(fā)現(xiàn)在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。

標簽block:用于在父模板中預留區(qū)域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標簽寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數(shù)據(jù)。

{%block 名稱%}
預留區(qū)域,可以編寫默認內容,也可以沒有默認內容
{%endblock  名稱%}
3.2、子模板

標簽extends:繼承,寫在子模板文件的第一行。

{% extends "父模板路徑"%}
子模版不用填充父模版中的所有預留區(qū)域,如果子模版沒有填充,則使用父模版定義的默認值。

填充父模板中指定名稱的預留區(qū)域。

{%block 名稱%}
實際填充內容
{{block.super}}用于獲取父模板中block的內容
{%endblock 名稱%}

實例

view.py

def temp4(request):
    "模板繼承"
    context = {
        'title' : '模板繼承',
        'temp1' : '模板1',
        'temp2' : '模板2',
    }

    return render(request,'temp4.html',context=context)

html:

temp3.html用做父模板,temp4.html做子模板

temp3.html

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

<h1>-----------網(wǎng)頁頭部---------</h1>
<hr>
//

{% block quyu1 %}
<p>這個是區(qū)域1 請?zhí)砑觾热輠{ title }}</p>
<p>這個是區(qū)域1 請?zhí)砑觾热輠{ temp1 }}</p>
<p>這個是區(qū)域1 請?zhí)砑觾热輠{ temp2 }}</p>
{% endblock quyu1 %}
<hr>
{% block quyu2 %}
<p>這個是區(qū)域2 請?zhí)砑觾热?lt;/p>
{% endblock quyu2 %}
<h1>-------------------網(wǎng)頁尾部---------------------</h1>
</body>
</html>

temp4.html

{% extends 'temp3.html' %} 
<!-這是繼承頁面-><!--{-->
<!DOCTYPE html>
<html lang="en">
<head>    <meta charset="UTF-8">   
    <title>Title</title></head>
<body>{% block quyu2%}      
<!--添加預留區(qū)域的內容--><a>你好呀</a>
{% endblock quyu2 %}
</body></html>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在上一章節(jié)中我們使用 django.http.HttpResponse() 來輸出 "Hello World!"。...
    hiekay閱讀 3,135評論 0 1
  • 模板語言包括4種類型,分別是 模板變量 標簽 過濾器 注釋 模板變量 模板變量的作用是計算并輸出,變量名必須由字...
    IT的咸魚閱讀 513評論 0 0
  • 官方文檔 常用的語法 在DjangoHong Kong只需要記兩種特殊符號: {{ }}:變量相關 {% %}: ...
    Pope_Li閱讀 1,420評論 0 0
  • Django模板語言 常用語法變量相關的用{{ }}邏輯相關的用{% %} 變量在Django的模板語言使用變量的...
    免跪姓黃閱讀 466評論 0 3
  • 模板 作為Web框架,Django提供了模板,用于編寫html代碼,還可以嵌入模板代碼更快更方便的完成頁面開發(fā),再...
    錦魚閱讀 2,363評論 0 0

友情鏈接更多精彩內容