自定义标签和模板继承

标签补充

{%if '看电影' in hobby%}
{#判断这个字符串是否在列表中#}
    <h2>喜欢看电影</h2>
{%else%}
     <h2>不喜欢看电影</h2>
{%endif%}

<!--标签结合过滤器一起使用-->
{%if hobby|length > 3 %}
    <h2>xxx</h2>
{%endif%}

<!--根据字典的key取出value,需要注意,使用点,不需要带引号-->
<h2>{{score.小1}}</h2>

自定义过滤器

1. 在当前使用自定义过滤器的子应用中创建一个文件夹,templatetags,创建python文件
2.在py文件中定义python代码
from django import template
register = template.Library()
# 编写自定义过滤器代码(函数)
# 完成两个数相乘
@register.filter # 把普通函数注册成过滤器
def multiplication(x,y):
    return x*y

3.在settings文件中注册当前子应用,
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'day5'
]

4. 使用方式:在模板页面中先通过load标签加载py文件,用过滤器的语法进行使用
{%load mytag%}
在html中使用<h3>{{num|multiplication:20 }}</h3>

如果自定义过滤器只定义了一个参数,不需要额外传参,会把当前的模板变量值传递到过滤器中,如果过滤器定义了两个参数,需要传入一个参数,传参的方式在过滤器名字后面加上冒号再写具体参数值

{{模板变量 | multiply:20 }}

过滤最多支持两个参数

完整代码:

#day5/ templatetags / mytag.py
# 自定义过滤器和标签
from django import template
from django.template import Library
# 注册器对象
register = Library()

# 完成两个数相乘
@register.filter # 把普通函数注册成过滤器
def multiplication(x,y):
    return x*y
# 字符串大写
@register.filter
def myupper(str):
    return str.upper()

# urls.py
urlpatterns = [
  path('mytagtest',my_tag_test),
]
# views.py
def my_tag_test(request):
    data = {
        "num":100,
        'upper':'i love you',
    }
    return render(request,'day5/my_tag_test.html',data)
 my_tag_test.html
{#导入自定义过滤器文件#}
{%load mytag%}
<body>
 <h1>自定义过滤器</h1>
 <!--multiplication(num,20)-->
<h3>{{num | multiplication:20 }}</h3>

<h3>{{upper|myupper}}</h3>
<!--myupper(i love python)-->
</body>

自定义标签

步骤和自定义过滤器一样

# mytag.py
# 把普通的函数装饰成自定义标签函数
@register.simple_tag
def atag(x,y):
    return x+y


# 使用方式,在模板中通过模板标签调用
{%atag x y %} #x和y是视图传递的模板变量

完整代码

# mytag.py
# 自定义标签
@register.simple_tag
def atag(x,y,z):
    return x+y+z
# views.py
# Create your views here.
def my_tag_test(request):
    data = {
        "num":100,
        'upper':'i love you',
        'x':'python',
        'y':'java'
    }
    return render(request,'day5/my_tag_test.html',data)

#  my_tag_test.html
    <!--自定义标签的使用-->
    {%atag x y%}

模板继承

为什么使用模板继承?

当多个页面的代码重复的时候,可以使用模板继承解决代码冗余问题 要继承模板使用extends标签

子文件中继承父文件的语法:
{% extends 'day5/py.html'%}
先在父文件中将所需更改的地方包围出来,然后就可以在子文件里面进行更改:
{%block 更改区域的名称%}
        
{%endblock%}
{#父(主)页面#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        a{
            text-decoration: none;
        }
        #header{
            height: 100px;
            background-color: aqua;
        }
        {#预留一块区域交给子去更改#}
        {% block css%}

           #content{
                height: 800px;
                background-color: bisque;
            }

        {%endblock%}


        #footer{
            height: 100px;
            background-color: blueviolet;
        }

    </style>
</head>
<body>
        <div id="header">
            <p>头部</p>
            <a href="/day5/index">首页</a>
            <a href="/day5/course1">python课程</a>
            <a href="/day5/course2">java课程</a>
        </div>

        <div id="content">
              {#预留一块区域交给子去更改#}
            {% block content%}
                所有的课程展示
            {%endblock%}
        </div>

        <div id="footer">尾部</div>
</body>
</html>
子文件
{% extends 'day5/py.html'%}

{% block css%}
       #content{
            height: 800px;
       ![img.png](img.png)     background-color: pink;
        }
{%endblock%}

{%block content%}
    python课程展示....
{%endblock%}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值