Django之模板語法

模板語法之數據傳遞

將數據從後端傳給前端頁面的方法

# 第一種
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 %}

模板語法之自定義

必須先做的事

  1. 在應用名下新建一個名爲templatetags文件夾(必須叫這個名字)

  2. 在該新建的文件夾內新建一個任意名稱的py文件

  3. 在該py文件中需要固}定寫下面兩句代碼

  4. 在前端頁面{%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">
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章