Django之自定義模板和過濾器、靜態文件配置

一.自定義過濾器

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