filter:過濾器,用來修改變量的顯示結果css
內置過濾器html
default:默認值python
filesizeformat:文件大小,將值格式化爲可讀的文件尺寸django
add:給變量加參數安全
length:返回長度app
slice:切片函數
first / last:取第一個/最後一個元素oop
join:使用字符串拼接列表ui
truncatechars:截斷,按照字符計數翻譯
date:日期格式化
語法:{{ value|date:"Y-m-d H:i:s"}}
在settings.py中配置:
USE_L10N = False DATETIME_FORMAT = 'Y-m-d H:i:s' # datetime類型 DATE_FORMAT = 'Y-m-d' # date類型 TIME_FORMAT = 'H:i:s' # time類型
配置後,使用{{now}}能夠實現日期格式化
safe:告訴django這段代碼是安全的,不須要轉義
value = "<a href='#'>點我</a>"
在app下建立一個名爲templatetags的python包
在templatetags中建立py文件,文件名自定義(my_tags.py);
在py文件中寫:
from django import template register = template.Library() # register也不能變
寫函數+裝飾器
@register.filter def add_xx(value, arg): # 最多有兩個 return '{}-{}'.format(value, arg) @register.filter(name='adds') # 至關於更改了函數名,使用時,使用新的函數名
在模板文件中使用,html文件
{% load my_tags %} {{ 'alex'|add_xx:'dsb' }}
注意:
符號:{% %}
for循環
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
Variable | Description |
---|---|
forloop.counter |
當前循環的索引值(從1開始) |
forloop.counter0 |
當前循環的索引值(從0開始) |
forloop.revcounter |
當前循環的倒序索引值(到1結束) |
forloop.revcounter0 |
當前循環的倒序索引值(到0結束) |
forloop.first |
當前循環是否是第一次循環(布爾值) |
forloop.last |
當前循環是否是最後一次循環(布爾值) |
forloop.parentloop |
本層循環的外層循環 |
{% for book in all_books %} <tr> ..... </tr> {% empty %} <td>沒有相關的數據</td> {% endfor %}
if判斷
{% if 條件1 %} xxx {% elif 條件2 %} xxx {% else %} xxxxx {% endif %}
with:給變量重命名,但只在with區域內生效
{% with hobby.2 as talk %} {# 至關於 {% with talk=hobby.2 %},其中=兩邊不能有空格 #} {{ talk }} {% endwith %}
csrf_token
符號:{# 要註釋的內容 #}
快捷鍵:Ctrl + ?
{# 要註釋的內容 #}
母板就是一個普通的html,提取多個頁面的公共部分,經過定義block塊來實現
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> {% block page-css %} {% endblock %} </head> <body> <h1>這是母板的標題</h1> {% block page-main %} {% endblock %} <h1>母板底部內容</h1> {% block page-js %} {% endblock %} </body> </html>
block塊:
{% block 塊名 %} {% endblock %}
注意:咱們一般會在母板中定義頁面專用的CSS塊和JS塊,方便子頁面替換
子頁面繼承母板:{% extends '母板html' %}
{% extends 'layouts.html' %}
子頁面經過重寫block塊,來替換母板中相應的內容
{% block page-main %} <p>世情薄</p> <p>人情惡</p> <p>雨送黃昏花易落</p> {% endblock %}
組件:一小段html代碼段
能夠將經常使用的頁面內容如導航條,頁尾信息等組件保存在單獨的文件中,而後在須要使用的地方導入
{% include 'navbar.html' %}
目的:更改setting中靜態文件的別名時,不影響在更改以前的靜態文件的引用,即引用會跟隨別名的更改而自動更改,這樣就不會報錯了
方法一:使用static,本來路徑:/static/images/hi.jpg
{% load static %} <img src="{% static "images/hi.jpg" %}" alt="Hi">
{% load static %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}">
方法二:使用get_static_prefix,本來路徑:/static/images/hi.jpg
{% load static %} <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi"> {# 補充:獲取別名 #} {% get_static_prefix %}
{% load static %} {% get_static_prefix as STATIC_PREFIX %} <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi">
和自定義filter相似,區別:接收的參數更靈活,能接收萬能參數
定義註冊simple_tag
@register.simple_tag def join_str(*args, **kwargs): return '{} - {} '.format('*'.join(args), '$'.join(kwargs.values())) @register.simple_tag(name='join') # 至關於更改了函數名,使用時,使用新的函數名
使用自定義simple_tag
{% load my_tags %} {% join_str '1' '2' k1='3' k2='4' %}
在app下的templatetags(python包)中建立py文件,文件名自定義(my_inclusion.py);
在py文件中寫:
from django import template register = template.Library() # register也不能變
寫函數+裝飾器
@register.inclusion_tag('result.html') # result.html 是內容的html def show_results(n): n = 1 if n < 1 else int(n) data = ["第{}項".format(i) for i in range(1, n+1)] return {"data": data}
在result.html中寫:
<ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %} </ul>
在模板文件中使用
{% load my_inclusion %} {% show_results 10 %}