官方文檔:css
https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#std:templatetag-for
1.常見語法html
兩種頁數符號python
{{}} {% %}
1)變量django
變量名由字母、數字、下劃線組成;模板語言中用點「.」來獲取相應的屬性bootstrap
{{變量名}}
模板支持的寫法:安全
{# 取列表中的的第x個參數 #} {{ 列表.x }} {# 取字典中key的值 #} {{ 字典.key }} {# 取對象的屬性和不帶參數的方法 #} {{ 對象.屬性 }} {{ 對象.方法 }}
示例:app
def test(request): class Info(object): def __init__(self, name, pwd): self.name = name self.pwd = pwd def show_info(self): return "用戶名:{},密碼:{}".format(self.name, self.pwd) info = Info('ch', '123') name = 'zhzh' list_re = ['zhang', '123'] dic_re = {'name': 'zh', 'pwd': '321'} import datetime date = datetime.datetime.today() return render(request, 'test.html', { 'name': name, 'dic': dic_re, 'list': list_re, 'obj': info, 'date': date, 'message': ''' 再沒聽到你 對我說你最愛的故事 我想了好久 我開始慌了 是否是我又作錯了什麼 你哭着對我說 童話裏都是騙人的 我不多是你的王子 也許你不會懂 從你說愛我之後 個人天空星星都亮了 我願變成童話裏 你愛的那個天使 張開雙手變成翅膀守護你 你要相信 相信咱們會像童話故事裏 幸福和快樂是結局 一塊兒寫咱們的結局 你哭着對我說 童話裏都是騙人的 我不多是你的王子 也許你不會懂 從你說愛我之後 個人天空星星都亮了 我願變成童話裏 你愛的那個天使 張開雙手變成翅膀守護你 你要相信 相信咱們會像童話故事裏 幸福和快樂是結局 我要變成童話裏 你愛的那個天使 張開雙手變成翅膀守護你 你要相信 相信咱們會像童話故事裏 幸福和快樂是結局 我會變成童話裏 你愛的那個天使 張開雙手變成翅膀守護你 你要相信 相信咱們會像童話故事裏 幸福和快樂是結局 一塊兒寫咱們的結局 ''' })
<div class="container"> <div class="row col-sm4 col-sm-offset-3"> <div class="col-sm-6"> <hr> 變量 <br> {{ name }} <hr> 字典,按key取值 <br> {{ dic.name }},{{ dic.pwd }} <hr> 列表,按索引取值,字典後面調用方法求長度 <br> {{ list.0 }},{{ list.1 }},{{ list|length }} <hr> 對象,經過點.訪問對象的屬性和方法 <br> {{ obj.name }},{{ obj.pwd }},{{ obj.show_info }} <hr> 字符串顯示,設置當字符串超出多少個字符以後以省略號的形式顯示 <br> {{ message|truncatechars:200 }} <hr> 時間對象,格式化時間顯示 <br> {{ date|date:"Y-m-d H:i:s" }} <hr > 字符串顯示和防止xml注入,加入safe參數可執行字符串中的腳本 <br> {{ str|safe }} </div> </div> </div>
2)Filterside
基本語法函數
{{ value|filter_name:參數 }}
default,默認值oop
{{ value|default: "nothing"}}
注意:
若是value沒有值傳則顯示nothing
length,求長度,如求列表的長度
{{ value|length }}
filesizeformat,將值格式化成一個‘人可讀的’文件尺寸
{{ value|filesizeformat }}
slice,切片,顧頭不顧尾
{{value|slice:"首:尾"}}
date,格式化
{{ value|date:"Y-m-d H:i:s"}}
safe
Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,緣由顯而易見,這樣是爲了安全。可是有的時候可能不但願這些HTML元素被轉義,好比作一個內容管理系統,後臺添加的文章中是通過修飾的,這些修飾多是經過一個相似於FCKeditor編輯加註了HTML修飾符的文本,若是自動轉義的話顯示的就是保護HTML標籤的源文件。爲了在Django中關閉HTML的自動轉義有兩種方式,若是是一個單獨的變量咱們能夠經過過濾器「|safe」的方式告訴Django這段代碼是安全的沒必要轉義
{{ str|safe }}
truncatechars,若是字符串字符個數超出了指定的字符數量,那麼會被截斷。截斷的字符串將以可翻譯的省略號序列(「...」)結尾
{{ message|truncatechars:200 }}
自定義filter,只帶一個或兩個參數的Python函數
變量(輸入)的值 - -不必定是一個字符串 參數的值 - 這能夠有一個默認值,或徹底省略 例如:
在過濾器{{var | foo:「bar」}}中,過濾器foo將傳遞變量var和參數「bar」
步驟:
I)在創建的APP內新建一個 templatetags 包(python package)
II)在新建的包內新建一個py文件
III)py文件內定義實現具體功能的函數,按照固定的寫法將其註冊到Django的模板語言中
IV)重啓Django服務
V)在HTML中調用
導入新建的py文件,在調用相關的filter函數
自定義simpletag,與自定義filter相似,只不過接收更靈活的參數
註冊和定義: @register.simple_tag(name="plus") def plus(a, b, c): return "{} + {} + {}".format(a, b, c) 導入使用: {% load py文件 %} {% plus "1" "2" "abc" %}
inclusion_tag,多用於返回HTML代碼
示例:
from django import template # 生成一個用於註冊自定義的filter方法的實例 register = template.Library() @register.filter(name='str_sum') def str_sum(str_1, str_2): return "{} {}".format(str_1, str_2) @register.inclusion_tag('ul.html', name='wapper') def my_menu(arg): ret = ["第{}項".format(i) for i in range(arg)] return {'data': ret}
<div class="col-sm-6"> {% load filter_test %} <hr> {#調用filter內定義的函數#} {{ name|str_sum:"vary happy" }} <hr> 註冊方法:@register.inclusion_tag('ul.html',name='wapper') <br> 調用 和 傳參數 {% wapper 10 %} </div>
<ul> {% for i in data %} <li>{{ i }}</li> {% endfor %} </ul>
3)Tags
for循環
示例:循環列表
{% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
for循環相關參數
forloop.counter 當前循環的索引值(從1開始) forloop.counter0 當前循環的索引值(從0開始) forloop.revcounter 當前循環的倒序索引值(從1開始) forloop.revcounter0 當前循環的倒序索引值(從0開始) forloop.first 當前循環是否是第一次循環(布爾值) forloop.last 當前循環是否是最後一次循環(布爾值) forloop.parentloop 本層循環的外層循環
for ... empty
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>循環爲空時執行這裏的語句</li> {% endfor %} </ul>
if,elif 和 else條件語句
{% if a %} <div>知足條件一執行</div> {% elif b %} <div>知足條件二執行</div> {% else %} <div>不知足前面的條件執行</div> {% endif %}
{% if a %} <div>知足條件執行</div> {% else %} <div>不知足條件執行</div> {% endif %}
with,定義中間變量
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
csrf_token,跨站請求僞造保護
在頁面的form表單裏面寫上{% csrf_token %}
<form action="/app/upload_file/" method="post" enctype="multipart/form-data"> {# 引入csrf_token,防止跨站請求僞造#} {% csrf_token %} ....... </form>
補充:
1)if 判斷支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷,可是Django中不支持連續判斷,例如:不支持if a>b>c等寫法
2)Django模板語言中屬性的優先級大於方法
2.母板
繼承母板,在子頁面中頁面最上方導入母板
{% extends '母版HTML文件' %}
塊,經過在母板中定義塊,在子頁面中經過定義母板中的block名來替換模板中相應的內容
{% block page-test %} HTMl代碼 {% endblock %}
組件,將經常使用的頁面內容保存在單獨的文件中如導航條、頁尾信息,而後在須要使用的地方導入
{% include '組件HTML文件' %}
靜態文件相關
{% load static %} <img src="{% static "images/pic.jpg" %}" alt="圖片加載失敗" />
示例:修改setting.py中的static路徑
# STATIC_URL = '/static/' STATIC_URL = '/333/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
導入靜態文件(CSS、JS等文件時經過靜態文件)
{# 靜態文件,提升拓展性#} {#<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">#} {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.min.css' %}"> <link rel="stylesheet" href="{% static 'font-awesome-4.7.0/css/font-awesome.min.css' %}">
引用JS文件,以及當在多個地方被引用是可起別名,至關於保存爲一個變量
{% load static %} {% static "images/pic.jpg" as mytest %} <img src="{{ mytest }}"></img>
使用get_static_prefix
{% load static %} <img src="{% get_static_prefix %}images/pic.jpg" alt="圖片加載失敗" />
或者起別名
{% load static %} {% get_static_prefix as STATIC_PREFIX %} <img src="{{ STATIC_PREFIX }}images/pic.jpg" alt="圖片加載失敗" />