Django官方文檔
可見https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for
和python一樣,Django也有自己的語法
后台向模板傳遞對象
傳函數名到前端,會自動加括號調用,但是不支持傳參
對象:打印了這個對象
Django模板語法
兩種標記符號
{{ }} 與變量相關
{% %}與語法相關
遇到點號(.)查詢優先級
1.字典的值 最高
2.屬性或方法查詢 其次
3.數字索引查詢 最低
變量
通過索引:
列表.索引值
通過方法:
但是只能使用不帶參數的語法
過濾器 針對遍歷
本質:把管道左邊當作第一個參數傳遞給右邊的方法
values {{ value|default:"nothing"}} 如果values是False或null 使用默認值nothing length {{ value|length }} 計算value 長度 filesizeformat 格式化文件大小 {{ value|length }} slice 切片字符串 {{value|slice:"2:-1"}} date 沒有% {{ value|date:"Y-m-d H:i:s"}}
truncatechars
{{ value|truncatechars:9}} value大於多於多少長度 剩下部分用省略號表示
truncatewords {{ value|truncatechars:9}} 相當於按照空格切片取values個分組
如:haha1 hahah2 hahaha3 haahha4 hahah5 ha5 ah6 values3就是 haha1 hahah2 hahaha3
cut
{{ value|cut:' ' }}
移除value中所有的與給出的變量相同的字符串
join
像 str.join(list)
safe
在前端取消轉移 變為html代碼
{{ dict_obj.name|safe }}
后端:from django.utils.safestring import mark_safe
xxx = mark_safe('<h1>我是h1標簽</h1>') #把xxx轉為真正安全的html代碼
標簽
for循環
{% for foo in l %} <p>{{ foo }}</p> <p>{{ forloop }}</p> {% endfor %}
forloop 是一個字典 {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
parentloop 是上級循環forloop
{% empty %}和 {% endfor %} 同級
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if判斷
{% if a %} you a {% elif b %} you b {% else %} 沒有用戶 {% endif %}
with 別名
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
或者
{% with business.employees.count as total %} {{ total }} employee{{ total|pluralize }} {% endwith %}
自定義 過濾器 標簽 inclusion_tag
自定義過濾器(最多一個參數)
1.在app下新建 templatetags
2.建立py
3. 導入
from djago import template
register = template.Library()
4.過濾器由 @register.filter(name="cut") 裝飾
5.返回結果
@register.filter(name="cut") def cut(value, arg): return value.replace(arg, "")
6 導入py文件
{{ somevariable|cut:"0" }} {{ d.name|addSB }}
自定義標簽
@register.simple_tag
def plus(a,b,c):
return a+b+c
{% plus 1 2 3 %} 用的是方法
自定義inclusion_tag
如果提示 Django: is not a registered tag library.
在setting.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], 'libraries': { "my_tag": "app01.templatetags.xxx", }, }, }, ]
{% 別名 參數%} 拿到頁面
模板的繼承與導入
一般來說 我們模塊的話有三個塊 一個JS塊一個內容 一個css
如果要繼承原來的
{{ block.super }}
導入組件
{% include "cbs.html" %}
靜態文件相關
{% load static %} <img src="{% static 'images/hi.jpg' %}" alt="Hi!" />
起別名:方便導入{% static "images/hi.jpg" as myphoto %}
常用語法:{{ XXX}},{% xxx %}
舉個例子
def template_test(request):
l = [11, 22, 33] d = {"name": "alex"} class Person(object): def __init__(self, name, age): self.name = name self.age = age def dream(self): return "{} is dream...".format(self.name) Alex = Person(name="Alex", age=34) Egon = Person(name="Egon", age=9000) Eva_J = Person(name="Eva_J", age=18) person_list = [Alex, Egon, Eva_J] return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
然后在 template_test.html 可以引用這個變量
{# 取l中的第一個參數 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }} {# 取對象的name屬性 #} {{ person_list.0.name }} {# .操作只能調用不帶參數的方法 #} {{ person_list.0.dream }}
Filters(過濾器)
在Django的模板語言中,通過使用 過濾器 來改變變量的顯示。
過濾器的語法: {{ value|filter_name:參數 }}
使用管道符"|"來應用過濾器。
例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。
注意事項:
- 過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
- 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
- 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
- '|'左右沒有空格沒有空格沒有空格
Django的模板語言中提供了大約六十個內置過濾器。
我們簡單介紹下里面常用的過濾器。
default
如果value沒有值 即為空,則賦值為nothing
{{ value|default:"nothing"}}
length
返回值的長度,作用於字符串和列表。
{{ value|length }}
返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.
filesizeformat
將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB'
, '4.1 MB'
, '102 bytes'
, 等等)。例如:
{{ value|filesizeformat }}
如果 value 是 123456789,輸出將會是 117.7 MB。
slice
切片
{{value|slice:"2:-1"}}
如果value 是一個列表的話
如 value=['a', 'b', 'c', 'd']的話,就顯示
['c']
safe
不做介紹,一句話讓 字符串變為 HTML 代碼
我們簡單介紹下里面常用的模板
comment
¶
注釋
{% comment "Optional note" %}
adasdasdasasdasd
{% endcomment %}
truncatechars
一定字符串之后顯示...例如我們常見網頁的詳解
{{ value|truncatechars:9}}
在介紹block之前我們先介紹下母版
cut
移除value中所有的與給出的變量相同的字符串
{{ value|cut:' ' }}
切掉空格
join
每個value字符串后拼一個內容
block
此模塊可以用來繼承母版