Django之模板語法、模板傳/取值、過濾器、標簽、繼承、for/if


模板語法

	{{}}  變量相關
	{%%}  邏輯相關

自動序號

{{ forloop.counter }}

模板層之模板傳值

python基本數據類型全部支持傳遞給html文件
	函數
	類
		函數和對象會自動加括號
		# 模板語法不支持傳參
	對象
		后端給html文件傳遞數據的兩種方式
		1.指名道姓
			return render(request,'index.html',{'n':n,'f':f})

		2.locals()  # 會將當前名稱空間中所有的變量名全部傳遞給html頁面
			return render(request,'index.html',locals())  
	
		html頁面上 如何獲取到后端傳遞過來的數據 
			{{ 變量名 }}

模板層之模板取值

取值
		django模板語法取值 只有一種操作方式  句點符 .
		點索引
		點鍵
		
		<p>{{ l.2 }}</p>
		<p>{{ d.username }}</p>
		<p>{{ d.password }}</p>
		<p>{{ d.hobby.1.username.1 }}</p>

模板語法之過濾器

在Django的模板語言中,通過使用 過濾器 來改變變量的顯示。

過濾器的語法: {{ value|filter_name:參數 }}

使用管道符"|"來應用過濾器。

例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。

注意事項:

	1.過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
	2.過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
	3.過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
	4.'|'左右沒有空格沒有空格沒有空格
	|length			 # 返回值的長度,作用於字符串和列表
	|add  			 # 加法運算
	|default		 # 如果一個變量是false或者為空,使用給定的默認值。 否則,使用變量的值
	|truncatechars	  # 截取字符串的長度。三個點也算,所有如果要截取5個長度,應該5+3=8的長度
	|truncatewords	  # 截取單詞、詞語,以空格為標識
	|filesizeformat	  # 把文件大小轉換成人能看懂的。KB,GB
	|slice			 # 切片操作
	|date			 # 日期格式化
	|safe			 # 取消轉義操作

使用案例:

	<p>過濾器  |左邊的會當做過濾器的第一個參數 過濾器名右邊的會當做過濾器的第二個參數</p>
	<p>求數據長度:{{ s|length }}</p>
	<p>加法運算:{{ n|add:10 }}、{{ s|add:13132 }}、{{ s|add:'DSB' }}</p>
	<p>默認值(判斷值是否為空):{{ b|default:'這個b布爾值是True' }}、{{ ff|default:'這個ff布爾值是Flase' }}</p>
	<p>截取字符(截取5個字符 三個點也算):{{ s|truncatechars:8 }}</p>
	<p>截取單詞(截取8個單詞 三個點不算):{{ ss|truncatewords:8 }}、{{ sss|truncatewords:4 }}</p>
	<p>文件大小:{{ file_size|filesizeformat }}</p>
	<p>切片操作:{{ s|slice:'0:2' }}、{{ s|slice:"0:8:2" }}</p>
	<p>日期格式化:{{ ddd|date:'Y年/m月/d日' }}</p>
	<p>轉義:{{ res|safe }}、{{ res1 }}、后端直接標識安全:{{ res2 }}</p>

前后端取消轉義:

前端
		|safe
	后端
		from django.utils.safestring import mark_safe
		mark_safe('<h1>安全滴</h1>')
總結:前端代碼不一定非要在前端頁面寫,可以在后端寫好傳遞給前端頁面使用
這樣的話 你就可以利用到后端更加多的邏輯語法

模板語法之標簽

模板語法之標簽  (邏輯相關)

{% for foo in l %}  <!--l = [1,2,3,4,5,6]-->
	{% if forloop.first %}
		<p>這是我的第一次</p>
	{% elif forloop.last %}
		<p>這是最后一次了啊~</p>
	{% else %}
		<p>{{ foo }}</p>
	{% endif %}
	{% empty %}
    <p>for循環的對象內部沒有值</p>
{% endfor %}

自定義過濾器

自定義過濾器 標簽 inclusion_tag
先完成以下前期准備工作
	1.在應用名下新建一個名字必須叫templatetags文件夾
	2.在該文件夾內新建一個任意名稱的py文件(eg:mytag)
	3.在該文件內 必須先寫以下兩句代碼
		from django.template import Library
		
		register = Library()
		
	# 自定義過濾器
	@register.filter(name='my_sum')
	def index(a,b):
		return a + b

第一步定義:

第二步html頁面使用方式:

<p>自定義過濾器的使用</p>
	{% load mytag %}
	<p>{{ 10|my_sum:90 }}</p>

自定義標簽

	# 自定義標簽
	@register.simple_tag(name='my_baby')
	def xxx(a,b,c,d):
		return '%s?%s?%s?%s'%(a,b,c,d)

自定義標簽的使用:

<p>自定義標簽的使用</p>
	{% load mytag %}
	<p>{% my_baby 1 2 3 'hello world' %}</p>

總結:

<p>自定義的過濾器可以在邏輯語句中,而自定義的標簽不可以</p>
	{% if 10|my_sum:100 %}
		<p>條件成立</p>
	{% endif %}

	{% if my_baby 1 2 3 4 %}
		<p>條件成立</p>
	{% endif %}
		
	<p>自定義inclusion_tag的使用</p>
	{% load mytag %}
	{% myin 5 %}
	# 總結 頁面上使用他們 統一先導入
		{% load mytag %}

模板的繼承

某一個頁面大部分區域都是公用的 那這個頁面就可以作為模板頁面
	當別人繼承這個頁面之后 如何修改對應的區域

使用方法:

1.先在模板頁面上通過block實現划定區域
	{% block content %}	
			模板頁面內容
		{% endblock %}
2.子頁面中先導入整個模板
	{% extends '模板頁面.html'%}
		修改特定的區域  通過實現划定好的區域名稱
		{% block content %}
			子頁面內容
		{% endblock %}

通常情況下 模板頁面頁面應該起碼有三塊區域

	1.css部分
		{% block css %}	
			模板頁面內容
		{% endblock %}
	2.內容部分
		{% block content %}	
			模板頁面內容
		{% endblock %}
	3.JS部分
		{% block js %}	
			模板頁面內容
		{% endblock %}
		
	# 模板的block塊越多 可擴展性越高
	
	還支持子頁面調用父頁面對應區域的內容 並且可以無限次調用
		{{ block.super }}

模板的組件

可以將局部樣式布局提前寫好,然后哪里需要導哪里(不常用)

將html頁面當做模塊使用 哪里需要導哪里  這個html頁面通常都不是完整的 只是一個局部樣式
	{% include 'left.html' %}

for循環

普通for循環

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

for循環可用的一些參數:

Variable Description
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 user_list %}
  用戶人數:{{ user_list|length }}
{% elif black_list %}
  黑名單數:{{ black_list|length }}
{% else %}
  沒有用戶
{% endif %}

也可以只有if和else

{% if user_list|length > 5 %}
  七座豪華SUV
{% else %}
    黃包車
{% endif %}

if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。

with

定義一個中間變量,多用於給一個復雜的變量起別名。

注意等號左右不要加空格。

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

{% with business.employees.count as total %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

模板語法注釋

{# 注釋內容 #}				//這樣方式注釋,前端瀏覽器檢查看不見
<!--注釋內容-->				//瀏覽器檢查能看見


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM