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' %}
day06 模板层的更多相关文章
- Django-5 模板层
Django 模板层 在之前的例子中,我们采用了硬编码的方式,来返回文本 def current_datetime(request): now = datetime.datetime.now() ht ...
- django学习笔记-模板层
模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...
- django 实战篇之模板层
模板层 {{}} 变量相关 {%%} 逻辑相关 前端获取容器类型的数据统一使用 句点符(.) 两种给模板传递值的方式 return render(request,'index.html ...
- django——模板层
每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...
- Django基础模板层(75-76)
Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板 ** return render(request, 'index.html' ...
- Django 的路由层 视图层 模板层
--------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...
- DjangoMTV模型之视图层views及模板层template
Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...
- python 全栈开发,Day69(Django的视图层,Django的模板层)
昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...
- Django的模板层简介
Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...
随机推荐
- .NET 生态系统的蜕变之 .NET 6
.NET 6 是自.NET 4 框架以来生态系统看到的最大版本更新,虽然.NET Core 是2014年开始非常大的一项重大战略举措,但是.NET 6是真正的具有强大动力的非常重要的版本. 2021年 ...
- python numpy版本报错: File "*\numpy\__init__.py", line 305, in <module> _win_os_check()
具体代码如下所示: from numpy import * import operator a = random.rand(4, 4) print(a) 具体报错内容如下所示: Traceback ( ...
- Linux Ubuntu stty 使用
stty(set tty)命令用于显示和修改当前注册的终端的属性. 该命令是一个用来改变并打印终端行设置的常用命令. stty -a #将所有选项设置的当前状态写到标准输出中 old_stty_set ...
- PE头详细分析
目录 PE头详细分析 0x00 前言 0x01 PE文件介绍 0x02 PE头详细分析 DOS头解析 NT头解析 标准PE头解析 可选PE头解析 可选PE头结构 基址 代码段地址 数据段地址 OEP程 ...
- vue 插槽slot总结 slot看这篇就够了
一直模糊所以梳理一下,看了好多篇园友的文章和官网文档在这整理一下 默认插槽 //slot组件<template> <div class="slots"> s ...
- 你们不要再吵了! Java只有值传递..
写在前边 上次聊到Java8新特性 lambda时,有小伙伴在评论区提及到了lambda对于局部变量的引用,补充着博客的时候,知识点一发散就有了这篇对于值传递还是引用传递的思考.关于这个问题为何会有如 ...
- The art of multipropcessor programming 读书笔记-3. 自旋锁与争用(2)
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- 执行对象Statement、PreparedStatement和CallableStatement详解
执行对象是SQL的执行者,SQL是"安排好的任务",执行对象就是"实际工作的人". 执行对象有三种: Statement.PreparedStatement和C ...
- SpringCloud升级之路2020.0.x版-34.验证重试配置正确性(2)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节针对我们的重试进行测试 验证针对限流器异常的重试正确 通过系列前面的源码分析 ...
- Forest v1.5.13 发布,声明式 HTTP 框架,已超 1.7k star
Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...