模板語法之數據傳遞
將數據從後端傳給前端頁面的方法
# 第一種
return render(request,'index.html',{'n':n})
# 第二種
return render(request,'index.html',locals())
# 將當前所在的名稱空間中的名字全部傳遞給前端頁面
python所有數據類型都可以傳
傳函數名——傳過來會自動加括號調用,顯示返回值。
傳對象——對象內存地址,等於後端print對象,可通過點方法獲取屬性或調用方法
模板語法不能傳參,若函數或方法有參數,不能使用
前端獲取後端傳過來的容器類型的內部元素,通過句點符.
。.數字
,數字就是索引,字典就是用.key
。
也可點各個數據類型的內置方法(不需要傳參的)
前端兩種註釋
模板語法的註釋不會展示到前端頁面:{#註釋#}
原生html註釋會展示到前端:<!--註釋-->
這裏的展示到前端是指檢查前端代碼時是否可見。
模板語法之過濾器
語法:{{後端傳來的數據 | 過濾方法}},前面的值會當做第一個參數傳遞給|後面的函數
統計字符串或列表長度:length
傳入的值是空則返回default後面默認參數:default:'傳值爲空'
將數字格式化成表示文件大小的單位:filesizeformat
格式化時間(不要加百分號):date:'Y-m-d'
切片:slice:'0:8:2'
截取固定的長度的字符串,三個點也算:truncatechars:長度
按照空格截取文本內容:truncatewords:空格數
給數字加一個值,如果第一個參數是字符串,會默認全轉成字符串進行拼接:add
取消轉義:默認不會識別標籤語法,防止危險攻擊。取消轉義後能識別
前端
safe
後端
from django.utils.safestring import mark_safe
x = mark_safe('<h1>我是h1標籤</h1>')
模板語法之標籤
# for循環
{% for foo in l %}
<p>{{ foo }}</p>
<p>{{ forloop }}</p>
{% endfor %}
# if判斷
{% if flag %}
<p>flag不爲空</p>
{% else %}
<p>flag是空</p>
{% endif %}
# 嵌套使用
{% for foo in l %}
{% if forloop.first %}
<p>這是我的第一次</p>
{% elif forloop.last %}
<p>這是最後一次了啊</p>
{% else %}
<p>嗨起來!!!</p>
{% endif %}
{% endfor %}
# empty
當你的for循環對象爲空的時候會自動走empty代碼塊兒的內容
後端:
l = None
前端:
{% for foo in l %}
{% if forloop.first %}
<p>這是我的第一次</p>
{% elif forloop.last %}
<p>這是最後一次了啊</p>
{% else %}
<p>嗨起來!!!</p>
{% endif %}
{% empty %}
<p>你給我的容器類型是個空啊,沒法for循環</p>
{% endfor %}
模板語法之自定義
必須先做的事
-
在應用名下新建一個名爲templatetags文件夾(必須叫這個名字)
-
在該新建的文件夾內新建一個任意名稱的py文件
-
在該py文件中需要固}定寫下面兩句代碼
-
在前端頁面{%load 新建的py文件%}
from django import template register = template.Library()
自定義過濾器
# 後端
@register.filter(name='XBB')
def index(a,b):
return a+b
# 前端
{{ 666|XBB:8 }}
自定義標籤
# 後端
@register.simple_tag
def plus(a,b,c):
return a+b+c
# 前端
{% plus 1 2 3 %}
自定義inclusion_tag
# 自定義inclusion_tag
@register.inclusion_tag('login.html',name='login')
def login(n):
l = [ '第%s項'%i for i in range(n)]
return {'l':l}
# login.html
<ul>
{% for foo in l %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
# 調用
{% login 5 %}
模板的繼承與導入
繼承
首先需要在被繼承的模板中劃分多個區域
{% block 給區域起的名字 %}
{% endblock %}
通常情況下一個模板中應該至少有三塊
{% block css %}
頁面css代碼塊
{% endblock %}
{% block js %}
頁面js代碼塊
{% endblock %}
{% block content %}
頁面主體內容
{% endblock %}
子板繼承模板
先繼承模板所有的內容
{% extends 'home.html' %}
然後根據block塊的名字修改指定區域的內容
{% block 想修改區域的名字 %}
修改
{% endblock %}
導入
模板的導入:將一段html當做模塊的方式導入到另一個html展示
{% include '想導入的html文件名' %}
靜態文件配置
{% load static %}
# 第一種方式
<link rel='stylesheet' href="{% static 'css/mycss.css'%}">
# 第二種方式
<link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">