day06 模板层
作者:互联网
day06 模板层
今日内容
-
常用语法
-
模板语法传值
-
模板语法之过滤器
-
模板语法之标签
-
自定义过滤器、标签、inclusion_tag(BBS作业用一次)
-
模板的继承(django前后端结合 那么使用频率较高)
-
模板的导入(类似于python中导入模块)
常用语法
# 两种特殊符号
{{}} :变量相关的使用这个
{% %} : 逻辑相关的用这个
模板语法传值
如何给html文件传值
1.字典{}挨个指名道姓
节省系统资源
2.locals()全部传递
节省人力资源 # 学习阶段就使用这种方式
1.python基本数据类型全部支持模板语法传值
2.在django中模板语法取值只能使用一种方式(句点符.)
3.针对函数名模板语法传值之后会自动加括号执行将返回值渲染到页面上
4.针对类名和对象名模板语法传值之后都会先加括号调用
类名加括号会产生对象
对象加括号不符合正常的调用方式 还是对象本身,但是可以根据对象.的方式取值
但是会触发产生该对象类中的__call__方法
"""
小总结
django模板语法不支持函数传参
当需要引用变量名的时候使用双大括号 {{}}
"""
{{}} # 跟变量名相关
{%%} # 跟功能逻辑相关
模板语法之过滤器Filters
在Django的模板语言中,通过使用 过滤器 来改变变量的显示。
语法:
{{ value|filter_name:参数 }}
# 使用管道符"|"来应用过滤器。
例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。
注意事项:
过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
'|'左右没有空格没有空格没有空格
1、length:
返回值的长度,作用于字符串与列表
l = [1,2,3,4,5]
{{ l | length }} # 前端,返回l的长度:5
2、default:
默认值,如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
c = []
{{ c | default:'False' }} # value值为空,执行默认值
3、filesizefformat:
将值格式化
i = 123456789
{{ i | filesizeformat }} # 输出结果:117.7 MB
4、add:
进行加法运算
i = 111
{{ i | add:122 }} # 输出结果:233
5、date:
时间格式
{{ ctime | date:'Y-m-d H:i:s'}} # 输出当前时间
6、truncatechars:
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾
a = 'my name is SG'
{{ a | truncatechars:5 }} # 输出结果:my... ,点也会占用字符数量
7、safe:
转义,能把后端书写html格式的代码转换成html中的格式
ss = '<h1>Hi</h1>'
{{ ss| safe }}
# 后端转义:
from django.utils.safestring import mark_safe
ss = '<h1>Hi</h1>'
sss = mark_safe(ss)
<p>{{ sss }}</p>
模板语法之标签
1、标签看起来像是这样的: {% tag %}
2、标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
3、一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})
for标签
# 遍历每一个元素
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %}
# 遍历字典
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
# 循环序号可以通过{{forloop}}显示
{% for i in l %}
<p>{{ forloop }}</p>
{% empty %} # 当传过来的数据为空执行这个
<p>传递过来的数据是空的</p>
{% endfor %}
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环
if 标签
# {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if num > 100 or num < 0 %}
<p>无效</p>
{% elif num > 80 and num < 100 %}
<p>优秀</p>
{% else %}
<p>凑活吧</p>
{% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断
自定义过滤器
# 做一个大致了解即可(使用频率不高)
过滤器相当于python中的内置函数 自定义过滤器相当于python中自定义函数
自定义标签也是
"""
自定义过滤器 标签 inclusion_tag都需要三步走战略
1.在应用文件夹下创建一个名字必须叫templatetags文件夹
2.在创建的文件夹下创建一个任意名称的py文件
3.在该py文件内先固定写两句话
from django import template
register = template.Library()
"""
# 自定义过滤器(无论是内置的还是自定义都只能最多两个参数)
1、先在创建的文件自定义过滤器
from django import template
register = template.Library()
@register.filter(name='haha')
def aaa(a, b):
return a + b
2、前端中先声明文件名,在引用
{% load ags %} # 先声明,在引用
{{ s | haha:222 }}
自定义标签
# 自定义标签
1、先在创建的文件自定义标签
from django import template
register = template.Library()
@register.simple_tag(name='hh')
def bbb(a, b, c, d):
return '%s:%s:%s:%s' % (a, b, c, d)
2、前端中先声明文件名,在引用
{% load ags %} # 先声明,在引用
{% hh 1 2 3 4 %}
自定义inclusion_tag
# 自定义inclusion_tag
1、先在创建的文件inclusion_tag
@register.inclusion_tag('myul.html', name='my_ul')
def my_ul(n):
list = []
for i in range(1, n):
list.append('第%s次' % i)
return locals()
2、在myul.html中设置
<ul>
{% for foo in list %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
3、在前端使用
{% load ags %} # 先声明,在引用
{% my_ul 5 %}
模板的继承
在母版中先使用block划定将来可以修改的区域
{% block 自定义名称 %}
母版内容
{% endblock %}
在子版中继承并修改指定区域
{% extends 'home.html' %}
{% block 自定义名称 %}
自定义其他内容
{{ block.super }} # 也可以引用母版的内容
{% endblock %}
"""
母版中最少应该有三块区域
{% block content %} 可以根据页面内容的布局写多个
{% endblock %}
{% block css %} 可以添加别的css
{% endblock %}
{% block js %} 可以添加js
{% endblock %}
"""
模板的导入
类似于导模块
该模板不应该是一个完整的页面 而是一个局部页面
很多地方都需要使用的情况下可以使用模板的导入
{% include 'menu.html' %}
标签:forloop,自定义,标签,day06,语法,过滤器,模板 来源: https://www.cnblogs.com/1069943893com/p/15618228.html