一.介紹 在HTML的基礎上加上模板語言(包括:會被替換掉的變數和標簽) 二.模板語法之變數( {{ }} ) 2.1 基本用法 views: template: 2.2 過濾器 語法: 三.模板語法之標簽( {% %} ) 3.1 標簽操作 3.2 模板繼承 模版繼承可以讓您創建一個基本的“骨架” ...
一.介紹
在HTML的基礎上加上模板語言(包括:會被替換掉的變數和標簽)
二.模板語法之變數( {{ }} )
2.1 基本用法
views:
def index(request): import datetime s="hello" l=[111,222,333] # 列表 dic={"name":"yuan","age":18} # 字典 date = datetime.date(1993, 5, 2) # 日期對象 class Person(object): def __init__(self,name): self.name=name person_yuan=Person("yuan") # 自定義類對象 person_egon=Person("egon") person_alex=Person("alex") person_list=[person_yuan,person_egon,person_alex] return render(request,"index.html",{"l":l,"dic":dic,"date":date,"person_list":person_list})
template:
<h4>{{s}}</h4> #通過'.'引用 <h4>列表:{{ l.0 }}</h4> <h4>列表:{{ l.2 }}</h4> <h4>字典:{{ dic.name }}</h4> <h4>日期:{{ date.year }}</h4> <h4>類對象列表:{{ person_list.0.name }}</h4> #通過'.'引用對象的方法 <h4>字典:{{ dic.name.upper }}</h4>
2.2 過濾器
語法:
{{ 變數|過濾器:參數 }}
#加法 {{ i|add:5}} #如果一個變數是false或者為空,使用給定的預設值。否則,使用變數的值 {{ value|default:"nothing" }} #返回值的長度。它對字元串和列表都起作用 {{ value|length }} #將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等) {{ value|filesizeformat }} #如果 value=datetime.datetime.now() {{ value|date:"Y-m-d" }} #切片 {{ value|slice:"2:-1" }} #截斷字元串。截斷的字元串將以可翻譯的省略號序列(“...”)結尾。 {{ value|truncatechars:9 }} #截斷word。截斷的word將以可翻譯的省略號序列(“...”)結尾 {{ value|truncatewords:2 }} ''' Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後臺添加的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變數我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。 ''' value="<a href="">點擊</a>" {{ value|safe}}
三.模板語法之標簽( {% %} )
3.1 標簽操作
#for迴圈 {% for person in person_list %} <p>{{ person.name }}</p> {% endfor %} {% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %} #for...empty {% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
#if {% if num > 100 or num < 0 %} <p>無效</p> {% elif num > 80 and num < 100 %} <p>優秀</p> {% else %} <p>湊活吧</p> {% endif %}
#url {{% url ... %}}
3.2 模板繼承
模版繼承可以讓您創建一個基本的“骨架”模版,它包含您站點中的全部元素,並且可以定義能夠被子模版覆蓋的 blocks 。
先建立一個母板
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="style.css" /> <title>{% block title %}My amazing site{%/span> endblock %}</title> </head> <body> <div id="sidebar"> {% block sidebar %} <ul> <li><a href="/">Home</a></li> <li><a href="/blog/">Blog</a></li> </ul> {% endblock %} </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>
利用母板的html:
{% extends "base.html" %} {% block title %}My amazing blog{% endblock %} {% block content %} {% for entry in blog_entries %} <h2>{{ entry.title }}</h2> <p>{{ entry.body }}</p> {% endfor %} {% endblock %}