18.Django模版二

Django中的模版就是在html中规定的一些协议语法,然后通过引擎渲染称为完整的html语言,再返回给 用户。

1.继承

首选定义一个base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模版</title>
</head>
<body>

</body>
</html>

定义一个index.html

{% extends "base.html" %}

这就表示,index.html是基于base.html,不需要重复定义head,和body

语法:

{% extends "xxxx.html" %}

需要放置在第一行。

细心的同学可能已经发现了问题,在base.html中我们定义了 <title>模版</title> 如果想要在index.html中修改怎么办呢?

Django支持修改
修改base.html

<title>{% block title %} {% endblock %}</title>

修改index.html

{% extends "base.html" %}

{% block title %}
    我是标题
{% endblock %}

刷新浏览器,你会发现标题已经变为我是标题

block是Django模版的占为语法,在引擎解析的时候会替换掉父模版中定义的占位。

block-endblock之间可以设置内容,如果子模版中没有给出替换的内容,默认的内容就会展示出来。

#base.html
{% block test %}
    等待替换
{% endblock %}
#index.html
{% block test %}
    占位替换
{% endblock %}

你可以尝试注释掉index.html重的test block 查看显示的是什么。

2.过滤

模版中支持部分python语法,同样支持快捷的过滤。
所谓的过滤就是方便的处理,从视图传递到模版中的数据。

  • default
    {{ value|default:"nothing" }}
    
    如果value没有值将会显示nothing,就好比placeholder效果。
  • length
    {{ value|length }}
    
    计算长度,比如value=['a','b'] 将会展示2, 就想len()函数。
  • filesizeformat
    {{ value|filesizeformat }}
    
    文件大小格式化 比如value=123456789 将会展示117.7MB

更多内置过滤器请参阅:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/#ref-templates-builtins-filters

3.自定义过滤器

在app文件夹下面创建templatetags目录, 添加一个extras.py,名称无所谓

from django import template

register = template.Library()


# 替换给定的字符为''
def cut(value, arg):
    return value.replace(arg, '')


register.filter('cut', cut)

index.html中

#加载过滤器
{% load extras %}

{{ "aaaaa0aaa0"|cut:"0" }}

将会替换到字符串中的0
注册过滤后,需要重启服务器,才能生效
还可以使用装饰器,注册

from django import template

register = template.Library()


# 替换给定的字符为''
@register.filter(name='cut') # 代替register.filter('cut', cut)
def cut(value, arg):
    return value.replace(arg, '')
声明:原创文章,版权所有,转载请注明出处,https://litets.com。