Django之template,djangotemplate
一.介紹
在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 %}