Django小筆記-模板及Django高階擴充套件
定義模板 變數 檢視傳遞給模板的資料 要遵守識別符號規則 語法:{{var}} 注意:若變數不存在,則插入的是空字串 在模板中使用點語法 字典查詢 屬性或者方法 數字索引 在模板中呼叫物件的方法 注意:在模板裡定義的函式不能傳遞self以外的引數
標籤 語法:{% tag %} 作用:在輸出中建立文字 控制邏輯和迴圈 if標籤 格式 {% if 表示式 %} 語句 {% endif %} if-else 格式 {% if 表示式 %} 語句1 {% else %} 語句else {% endif %} if-elif-else 格式 {% if 表示式1 %} 語句1 {% elif 表示式2 %} 語句2 ...
{% else %} 語句else {% endif %} 例項{% if num %} <h1>sunck nice</h1> {% endif %}
for標籤 格式1 {% for 變數 in 列表 %} 語句 {% endfor %} 格式2 {% for 變數 in 列表 %} 語句1 {% empty %} # 注意:列表為空或者列表不存在時執行語句2 語句2 {% endfor %} 格式3 {{ forloop.counter }} #表示當前是第幾次迴圈 例項<h1>學生列表</h1> <ul> {% for stu in students %} <li> {{forloop.counter}}--{{stu.sname}}--{{stu.sgrade}} </li> </ul>
comment標籤 作用:相當於多行註釋,被註釋的內容不再執行 格式 {% comment %} 多行註釋 {% endcomment %}
ifequal/ifnotequa標籤 作用 判斷是否相等或者不相等 格式{% ifequal 值1 值2 %} 語句1 {% endifequal %} # 如果值1等於值2,執行語句1,否則不執行語句1 例項{% ifequal 'sunck' 'sunck' %} <h1>sunck handsome</h1> {% endifequal %}
include標籤 作用:載入模板並以標籤內的引數渲染 格式:{% include '模板目錄' 引數1 引數2 %}
url標籤 作用:反射解析(具體見下文“反向解析”) 格式:{% url 'namespace: name' p1 p2 %} csrf_token標籤 作用:用於跨站請求偽造保護 格式:{% csrf_token %}
block, extends標籤 作用:用於模板的繼承
autoescape標籤 作用:用於HTML轉義
過濾器 語法 {{ var|過濾器 }} 作用:在變數被顯示前修改它,只是加一個效果,對變數不會造成影響 lower:全小寫 upper:全大寫 例項:<h1>{{str|upper}}</h1> <!--過濾器(變成大全寫)--> 過濾器可以傳遞引數,引數用引號引起來 join 格式:列表|join:"#" 例項:<h1>{{list|join:'#'}}</h1>返回good#nice#handsome 如果一個變數沒有被提供,或者值為false,空,可以使用預設值 default 格式: {{var|default:"沒有"}} 例項:<h1>{{text|default:"沒有"}}</h1> 返回“沒有” 根據給定格式轉換日期為字串 date 格式: {{dateVal|date:'y-m-d'}} HTML轉義 escape 加減乘除 例項<h1>num = {{num|add:10}}</h1> <!--加--> <h1>num = {{num|add:-10}}</h1> <!--減--> <h1>num = {% numwidthratio num 1 5%}</h1><!--num/1*5--> <!--乘--> <h1>num = {% num widthratio num 5 1%}</h1> <!--除--> 註釋 單行註釋 語法{#註釋內容 #} 多行註釋 語法{% comment %} 註釋內容 {% endcomment %}
反向解析 當修改project/urls.py的正則,其他匹配的正則也要隨之改變,當正則表示式很多的時候,這樣就會很麻煩甚至會報錯 例項:../project/urls.py url(r"^", include('myApp.urls',namespace="app")) ../myApp/urls.py url(r"^$",views.index), url(r'^good/(\d+)/$',views.good,name="good"), ../myApp/views.py def index(request): student = Students.objects.get(pk=1) return render(request, 'myApp/index.html', {"stu": student,"num": 10,"str":"sunck good","list":["good","nice","handsome"]}) def good(request,id): return render(request,'myApp/good.html',{"num":id}) ../templates/good.html <h1>good</h1> ../templates/index.html <a href="{% url 'app:good' 1 %}">連結</a>
模板繼承 作用:模板繼承可以減少頁面的重複定義,實現頁面的重用 block標籤:在父模板中預留區域 ,子模板去填充 語法:{% block 標籤名 %}
{% endblock 標籤名 %} extends標籤:繼承模板,需要寫在模板檔案的第一行 語法 : {% extends '父模版路徑myApp/base.html' %} {% block main %} 內容 {% endblock 標籤名 %} 例項:templates/myApp/base.html(父模板) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>
<style> #header{ width: 100%; height: 100px; background-color: red; } #footer{ width: 100%; height: 100px; background-color: blue; } </style>
</head> <body> <div id="header">header</div>
<div id="main"> {% block main %}
{% endblock main %} <hr/> {% block main2 %}
{% endblock main2 %} </div>
<div id="footer">footer</div> </body> </html>