Django(六、模板层)

文章目录

  • 模板传值
      • 模板语法传值特性
  • 模板语法之过滤器
      • 常用的过滤器
      • 模板层之标签
            • 模板中的标签的格式为
            • 标签之if判断
      • 标签之for循环
      • 模板的继承与导入
            • 模板导入
            • 导入格式

Django(六、模板层)_第1张图片

模板传值

"""
模板层三种语法
{{}}:主要与数据值相关
{%%}:主要与逻辑相关
{##}:模板注释

django的模板语法是自己写的 跟jinja2不一样

1.针对需要加括号调用的名字 django模板语法会自动加括号调用你只需要写名字就行
2.模板语法的注释前端浏览器是无法查看的 {##},模板语法{##}是由后端处理的,当识别为模板注释时就会从html文件中移除了,不会返回给用户;而html注释是由前端浏览器对html处理时渲染时不做处理,但检查网页源码时还是能看见这些注释的。

"""

1.模板语法传值  字典和locals()
    return render(request, 'demo02.html', {'n1': name, 'a1': age})  
	# 传值方式1:精准传值 不浪费资源 针对多资源的传递书写麻烦
    return render(request,'demo02.html', locals())  
	# 传值方式2:将函数名称空间中所有的名字全部传递 名字过多并且不使用的情况下比较浪费资源

模板语法传值特性

1.基本数据类型正常展示
2.文件对象也可以展示并调用方法
3.函数名也会自动加括号并执行将返回值展示到页面上(不支持额外传参)
4.类名也会自动加括号调用
5.对象不会加括号,但可以获取对象的一些数据属性
6.索引、键、属性只能通过句点方式取值
针对可以加括号调用名字模板语法都会自动加括号调用
Django(六、模板层)_第2张图片

模板语法之过滤器

语法:{{ value|过滤器名:参数 }}
过滤器用管道符隔开(无空格),最多支持多传入一个参数。
过滤器是支持链式的,可以将多个过滤器串起来,上一个过滤器的输出作为下一个的输入

常用的过滤器

过滤器 功能 示例
default 如果一个变量是false或者为空,使用给自定的值。 反之,使用变量的值。 {{ value|default:“nothing”}}
length 对于字符串列表这类有length属性的,得到其值的长度 {{ value|length}}
filesizeformat 将传入的数字当做文件的字节数,将其处理成合适展示的文件大小,如2048就会展示为2 KB |{{ value filesizeformat }}
slice 对字符串进行切片 {{value|slice:“2:-1”}}
add 将传入的数字或字符串做相加或拼接处理 {{ value|length}}
safe 模板语法默认转义带html语法的文本,safe取消标签文本转义,让其可以被html渲染 {{ value|safe}}
truncatechars 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。 {{ value|truncatechars:9}}
truncatewords 在一定数量的字后截断字符串,处理同上…。 {{ value|truncatewords:9}}
cut 移除value中所有的与给出的变量相同的字符串如果value为’i love you’,那么将输出’iloveyou’. {{ value|cut:’ ’ }}
timesince datetime数据距离现在的时间(从现在起) {{ blog_date|timesince }}
timeuntil datetime数据距离现在的时间(到现在止) {{ blog_date|timesince }}
date datetime数据字符化输出 {{ value|date:“Y-m-d H:i:s”}}

模板层之标签

模板中的标签的格式为
# 1、
{% 标签名 %}

# 2、大多数标签都需要接收参数
{% 标签名 参数1 参数2 %}

# 3、一些标签需要有开始{% tag %}和结束标记{% endtag %}
{% 标签名 %}
...内容...
{% end标签名 %}

标签之forloop关键字,forloop模板语法自带的变量名

标签之if判断
在这里插入代码片格式:
{% if 条件1(可以自己写也可以用传递过来的数据) %}
        <p>今天又是周三了</p>
{% elif 条件2(可以自己写也可以用传递过来的数据) %}
        <p>我是列表</p>
{% else %}
        <p>我是else分支的!</p>
{% endif %}


eg:
    # if判断
判断a是True打印
 {% if a %}
    <p>今天又是周三了</p>
 {% elif l1 %}
     <p>我是列表</p>
{% else  %}
     <p>我是else分支的</p>
 {% endif %}

判断a传过来是true,打印今天又是周三了;a为false,则打印我是列表
a和l1都为false,则打印else分支

标签之for循环

for循环可用的一些参数:

Variable Description
forloop.counter 当前循环的索引(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是第一次循环则返回True,否则返回False
forloop.last 当前循环是最后一次循环则返回True,否则返回False
forloop.parentloop 本层循环的外层循环
{% for i in l1 %}
    <p>{{ forloop }}</p>
    <p>{{ i }}</p>
{% endfor %}

Django(六、模板层)_第3张图片
标签for与if混合使用及标签之empty

# for与if混合使用
{% for foo in l1 %}
    {% if forloop.first %}
        <p>这是我第一次循环</p>
    {% elif forloop.last %}
        <p>我是最后一次循环</p>
    {% else %}
        <p>{{ foo }}</p>

    {% endif %}
        {% empty %}
        <p>for循环的可迭代对象内部没有元素,根本没法循环</p>
{% endfor %}


解析:
forloop.first: 判断本次循环是不是第一次,是,就执行下面的代码
forloop.last: 判断本次循环是不是最后一次,是,就执行下面代码
empty: 你给我传的数据是空的无法循环取值(空字符串、空列表、空字典)

Django(六、模板层)_第4张图片
循环字典

# 循环字典
1.循环键
{% for r in d1 %}
        <p>{{ r }}</p>
{% endfor %}

2.循环键keys
{% for foo in d1.keys %}
    <p>{{ foo }}</p>
{% endfor %}

3.循环值values
{% for foo in d1.values %}
    <p>{{ foo }}</p>
{% endfor %}

4.items
{% for foo in d1.items %}
    <p>{{ foo }}</p>
{% endfor %}

解析:
    .items	: 返回可遍历的(,) 元组数组。

Django(六、模板层)_第5张图片
with起别名
django模板语法取值操作:只支持点语法
点语法既可以索引也可以点键

with起别名方法取出字典中NB
user_dict = {'name':'jack', 'age':18, 'gender':'male', 'hobby':[111,222,333,{'info':'NB'}]}


{% with user_dict.hobby.3.info as name %}
	<p>
        {{ name }}
    </p>
{% endwith %}

模板的继承与导入

模板的继承
当我们多个页面有相似的页面,我们可以采用下列方法

1.我们直接复制粘贴>>>创建一个新的html

2.模板的继承

1.在模板中使用block划定子板>>方便以后修改的区域
	{% block 区域名称 %}
    {% endblock%}
2.子版继承母板
	{% extends 'home.html'%}
	{% block 区域名称 %}
    	子板自己的内容
    {% endblock%}
    
注意:子板也可以继续使用子模板的内容
	{{block.super}}

关于模板中的继承,,至少有三个区域的模板可以继承去渲染,分别是页面内容区、CSS样式区、JS代码区

模板导入

提前将被导入的html页面写好。其他html页面想使用就可以导入

导入格式
 {% include '导入的html文件名'%}



    {% include 'myform.html'%}

你可能感兴趣的:(Django,django,python,后端)