一.自定義過濾器
1.需要在應用文件夾下創建templatetags文件夾,必須是這個名字。
2.templatetags文件夾創建一個xx.py文件,文件名隨便起
3.創建自定義過濾器
from django import template
register = template.Library() #必須這個名字
#自定義過濾器
@register.filter
def oo(v1,v2):
s = v1 + v2
return s
html中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load test %}
{{ s1|oo }} #沒有參數
{{ s1|oo:'幸福的生活' }} #有參數
#參數最多兩個
</body>
</html>
二.自定義標籤
創建標籤:
from django import template
register = template.Library()
# 自定義標籤
@register.simple_tag
def mytag(v1,v2,v3):
s = v1 + 'test' + v2 + ' ' + v3
return s
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load test %}
<h1>
{# {% mytag s1 %}#}
{% mytag s1 '1' '2' %}
</h1>
</body>
</html>
三.inclusion_tag
創建inclusion_tag:
# inclusion_tag
@register.inclusion_tag('inclusiontag.html')
#將inclusiontag.html裏面的內容用下面函數的返回值渲染,然後作爲一個組件一樣,加載到使用這個函數的html文件裏面
def func():
return {'data':[11,22,33]}
xx.html文件中(這個文件類似於一個組件):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for d in data %} #循環打印func的值
<li>{{ d }}</li>
{% endfor %}
</ul>
</body>
</html>
oo.html文件中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load test %}
{% func %} #這裏會加載xx.html裏面的內容,功能和上篇問斬的的include類似
</body>
</html>
圖解:
還可以傳參:
1.後端代碼:
def xxoo(request):
s1 = '張三和李四'
li = [11,22,33,44,55,66]
return render(request,'xxoo.html',{'s1':s1,'li':li})
前端代碼:
xxoo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load test %}
{% func li %}
</body>
</html>
templatetags文件夾下xx.py
# inclusion_tag
@register.inclusion_tag('inclusiontag.html')
def func(v1):
return {'data':v1}
xx.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for d in data %}
<li>{{ d }}</li>
{% endfor %}
</ul>
</body>
</html>
流程:
後端將參數傳給func函數v1,func返回的值給inclusiontag.html去渲染,xxoo.html執行func函數
四.靜態文件配置
需要在項目文件夾下創建一個靜態文件夾(statics),名字隨便起
settings.py文件中需要配置一下:
#靜態路徑 給下面的路徑STATICFILES_DIRS起個別名
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'statics')
]
html文件中使用:
{% load static %} #先加載
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'test.css' %}"> #標籤的寫法
</head>
<body>
<h1>你好</h1>
</body>
</html>
{% get_static_prefix %}:獲取靜態文件名
{% get_static_prefix as xx %}:起別名,下次用的時候直接用xx就行:
<link rel="stylesheet" href="{{ xx }}test.css">