1、模板層:html
python的模板:HTML代碼+模板語法python
模版包括在使用時會被值替換掉的 變量,和控制模版邏輯的 標籤。數據庫
import datetime t=datetime.datetime.now() # 方式1: return HttpResponse("<h1>%s</h1>"%str(t)[:19]) # 方式2: from django.template import Template, Context templateObj=Template("<h1 style='color:red'>current time: {{ time }}</h1>") contextObj=Context({"time":str(t)}) html=templateObj.render(contextObj) return HttpResponse(html) #方式3(經常使用的) return render(request,"time.html",{"time":str(t)[:19]})
2、模板語法之變量django
在 Django 模板中遍歷複雜數據結構的關鍵是句點字符 .緩存
1.語法:數據結構
{{var_name}}函數
views:oop
import datetime li=[] name="mqj" i=100 l=[777,888,[55,55,99]] d={"name":"mqj","age":"22"} date = datetime.date(1993, 5, 2) t=datetime.datetime.now() class Person(object): def __init__(self,name,age): self.name=name self.age=age def dream(self): return "I an dream" person_egon = Person("egon", 1000) person_alex = Person("alex", 9000) person_nacha = Person("nacha", 10000) PersonList=[person_egon,person_alex,person_nacha] coutext="ddssdd dssdsad djjjd ddddd ccsd cdc dS SD Dcdcd" label = "<a href=''>點擊</a>" return render(request,"index.html",{"name":name,"l":l,"d":d,"date":date,"t":str(t),"person_egon":person_egon,"PersonList":PersonList,"coutext":coutext,"label":label,"i":i})
template: spa
<p>{{ name }}</p> <p>{{ l.2.1}}</p> <p>{{ i }}</p> <p>{{ d.age }}</p> <p>{{ date.month}}</p> <p>{{ t }}</p> <p>{{ person_egon.name }}</p> <p>{{ person_egon.age }}</p> <p>{{ person_egon.dream }}</p> <hr> <p>{{ PersonList.0.name }}</p> <hr> {% for k,v in d.items %} <p>{{ k }},{{ v }}</p> {% endfor %} <hr> {% for Proson in PersonList %} <p>{{ Proson.name }}</p> {% endfor %} <hr> {% for Proson in PersonList reversed %} <p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p> {% endfor %}
3、模板之過濾器翻譯
1.語法
{{obj|filter__name:param}}
2.date:
若是 value=datetime.datetime.now()
{{ date|date:"Y-m-d" }}
3.default:
若是一個變量是false或者爲空,使用給定的默認值。不然,使用變量的值。例如:
{{ li|default:"nothing" }}
4.safe:
value
=
"<a href="
">點擊</a>"
{{ value|safe}}
5.slice:
若是 value="hello world"
{{ value|
slice
:
"2:-1"
}}
6.truncatechars
若是字符串字符多於指定的字符數量,那麼會被截斷。截斷的字符串將以可翻譯的省略號序列(「...」)結尾。
{{ value|truncatechars:
9
}}
4、模板之標籤
一、for標籤
遍歷每個字典:
{% for k,v in d.items %}
<p>{{ k }},{{ v }}</p>
{% endfor %}
能夠利用{% for obj in list reversed %}反向完成循環。
2.遍歷每個元素:
{% for person in person_list %} <p>{{ person.name }}</p> {% endfor %}
3.注:循環序號能夠經過{{forloop}}顯示
forloop.counter0 從0開始
forloop.revcounter0 反向從直到0
forloop.revcounter 反向開始
如:
{% for Proson in PersonList reversed %}
<p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p>
{% endfor %}
一、if 標籤
{% if %}會對一個變量求值,若是它的值是「True」(存在、不爲空、且不是boolean類型的false值),對應的內容塊會輸出。
{% if i > 100 %} <p>{{ i }}</p> {% elif i == 100 %} <p>等於100</p> {% else %} <p>{{ i }}</p> {% endif %}
二、with
使用一個簡單地名字緩存一個複雜的變量,當你須要使用一個「昂貴的」方法(好比訪問數據庫)不少次的時候是很是有用的
{% with a="mqj" %} <p>{{ a }}</p> {% endwith %}
三、csrf_token
這個標籤用於跨站請求僞造保護
5、自定義標籤和過濾器步驟:
1 、在settings中的INSTALLED_APPS,是否有當前應用
2 、在應用中建立一個templatetags
3 、在templatetags中建立py文件:mytag.py
4 、在mytag.py中:
引入:from django import template
from django.utils.safestring import mark_safe
register = template.Library() #register的名字是固定的,不可改變
5 、定義過濾器和標籤
@register.filter
def multi(x,y):
return x*y
@register.simple_tag
def multiTag(x,y,z):
return x*y*z
6 、 在引用模板中導入:{% load myTag %}
7 、 調用:
過濾器: {{var|filter_name:參數}} # 參數只能是一個
標籤: {% simple_tag 參數1 參數2 ... %}
對比過濾器與自定義標籤的使用:
過濾器函數的參數只能有兩個,自定義標籤無參數限制
過濾器能夠與邏輯標籤共同使用,好比if標籤。自定義標籤不能夠。