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">

猜你喜欢

转载自blog.csdn.net/qq_39253370/article/details/104933465