模板語言
阿新 • • 發佈:2017-06-16
clu pub efault 停止 ria files lower 整除 cnblogs
django模板查找機制
- 先在settings指定的目錄下查找,
- django\contrib\admin\templates
- django\contrib\auth\templates
- 然後去每個app下的templates中查找
- 找到即停止查找,否則Template Not Found
屬性的訪問
使用 "." 來訪問變量的屬性 當模板系統遇到 "." 的查詢順序- 字典查詢(Dictionary lookup)
- 屬性或方法查詢(Attribute or method lookup)
- 數字索引查詢(Numeric index lookup)
過濾器
使用管道符號 (|)來應用過濾器,如{{ name|lower }}。將在變量 {{ name }} 使用 lower 過濾後再顯示它的值
{{ value2|safe }} 將字符串標記為在輸出之前不需要進一步的HTML轉義 {{ list|join:", "}} 列表轉字符串 {{ value|urlencode }} url編碼 {{ value|first }} 列表第一個元素 {{ value|last }} 列表最後一個元素 {{ value|random }} 隨機返回 {{ value|length }} 返回值的長度 {{ value|length_is:"4" }} 如果值的長度是4,則返回True {{ value|linenumbers }} 顯示帶行號的文本 {{ value|default:"nothing" }} 如果 value沒有被提供,或者為空, 上面的例子將顯示“nothing”。 {{ value|filesizeformat }} 如果 value 是 123456789,輸出將會是 117.7 MB。 {{ value4|date:‘Y-m-d‘ }} 轉換時間格式 {{ value2|add:3 }} value2+3 int類型 {{ value|capfirst }} 大寫變量的第一個字母,django--> DjangoTemplates {{ value|cut:"-" }} 刪除字符串中的 "-" {{ value|dictsort:"name" }} 接受一個字典列表,並返回按參數中給出的鍵排序後的列表。 dictsortreversed 反序 {{ value|divisibleby:"3" }} 如果value可以被給出的參數整除,則返回 True {{ value|truncatechars:9 }} 如果字符串字符多於指定的字符數量,那麽會被截斷
詳情參考:http://python.usyiyi.cn/django/topics/class-based-views/index.html
自定義過濾器
文件結構 包含一個templatetags 目錄,和models.py、views.py等文件處於同一級別目錄下。mysite/ ├── blog │ ├── __init__.py │ ├── models.py │ ├── templatetags │ │ ├── blog_extras.py │ │ └── __init__.py │ └── views.py在添加這個模塊以後,在模板裏使用標簽或過濾器之前你將需要重啟服務器。
定義filter
from django import template register = template.Library()
@register.filter(is_safe=True) # 只能接受兩個參數 def filter_multi(var,bar): # var是變量值, bar是選項值 return var * bar 模板文件 <!DOCTYPE html> {% load blog_extras %} # 導入定義的.py文件 <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>filter--->{{ x|filter_multi:20 }}</p> </body> </html>
自定義模板標簽
from django import template register = template.Library() @register.simple_tag # 可以接受多個參數 def simple_tag_multi(v1,v2,v): return v1 * v2 * v 調用方法與filter相同
inclusion標簽
通過渲染另一個模板來顯示數據 定義標簽# blog/templatetags/inclusion_tag.py from django import template register = template.Library() @register.inclusion_tag(‘include.html‘) def inc_test(xxx): value3 = [ {"title":"aaa"}, {"title":"bbb"}, {"title":"ccc"} ] return {"value":value3}
用於渲染的模板
# include.html <ul> {% for i in value %} <li>{{ i.title }}</li> {% endfor %} </ul>
在父模板中載入
# base.html {% load inclusion_tag %} <h1>base</h1> {% inc_test xxx %}
模板繼承
模板繼承可以創建一個基本的 “骨架” 模板 它包含站點中的全部元素 並且可以定義能夠被子模版覆蓋的block 當模板系統處理子模版時,首先定位父模板,並用子模版中的block替換掉父模板的block 使用方式- 創建一個base.html控制整個站點的框架
- 站點的每個分支都創建一個父模板,最後繼承Base.html
- 為每種頁面類型創建獨立的模板
{% block title %} {% endblock %} # 父模板中定義 {% extends "base.html" %} # 子模版繼承base.html {% block titel %} <a>xxx</a> {% endblock %} # 具體內容 {% include "public"} # 導入公共模板 {% include "public.html" with obj=uset_list} # 傳入上下文對象
模板語言