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' %}

day06 模板层的更多相关文章

  1. Django-5 模板层

    Django 模板层 在之前的例子中,我们采用了硬编码的方式,来返回文本 def current_datetime(request): now = datetime.datetime.now() ht ...

  2. django学习笔记-模板层

    模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...

  3. django 实战篇之模板层

    模板层 ​ {{}} 变量相关 ​ {%%} 逻辑相关 ​ 前端获取容器类型的数据统一使用 句点符(.) ​ 两种给模板传递值的方式 return render(request,'index.html ...

  4. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  5. Django基础模板层(75-76)

    Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板    ** return render(request, 'index.html' ...

  6. Django 的路由层 视图层 模板层

    --------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...

  7. DjangoMTV模型之视图层views及模板层template

    Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...

  8. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

  9. Django的模板层简介

    Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...

随机推荐

  1. 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)

    1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...

  2. C# 如何将日期格式化ISO8601模式

    类似于这样的时间戳格式:预计来访时间,时间参数需满足ISO8601格式:yyyy-MM-ddTHH:mm:ss+当前时区,例如北京时间:2018-07-26T15:00:00 + 08:00 stri ...

  3. CentOS部署多台服务器JDK(shell脚本部署)

    部署7台新服务器的jdk,数量不算多,但也不打算一台一台的部署,写了个脚本执行 [ #!/bin/bash# JDK 安装包名jdk_packge="jdk-8u162-linux-x64. ...

  4. js 组合继承详解

    目录 前言 原型链继承 构造函数继承 组合继承 前言 首先学习继承之前,要对原型链有一定程度的了解. 不了解可以去先阅读我另一篇文章,里面对原型链有一个较为详细的说明:js 原型链详解. 如果已经了解 ...

  5. jmeter 数据库压力测试之MySql

    1.首先下载合适的数据库驱动:https://mvnrepository.com/artifact/mysql/mysql-connector-java 2.创建testplan,并添加jar包 3. ...

  6. 力扣 - 剑指 Offer 30. 包含min函数的栈

    题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...

  7. 记录一个很傻的错误(C++)

    使用的vscode写代码,导入了vector,memory,然后忘了导入string.但是代码中能够提示std::string也就让我忘了导入string.然后就莫名其妙的报错了.找了很久的错.记录下 ...

  8. css 马赛克悬停效果

    css 马赛克悬停效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  9. Linux mem 2.4 Buddy 内存管理机制

    文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...

  10. 2020GACTF部分wp

    GACTF misc 签到 给了二维码图 切割再拼上就行 crymisc 给了一个crymisc.docx 无法打开 用file看一下 把后缀名改成zip然后解压 这里奇怪的是用winzip解压会提示 ...