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. 精准测试系列分享之一:JaCoCo 企业级应用的优缺点分析

    一.JaCoCo简介 JaCoCo是Eclipse平台下的开源产品,以小型,轻量化著称,常见集成在Eclipse Workbench中,除此之外的启动方式包括对接Ant和Maven,或是命令行的方式进 ...

  2. OpenWrt编译报错:Package airfly_receiver is missing dependencies for the following libraries

    今天在编译一个OpenWrt测试用例的时候出现报错 Package airfly_receiver is missing dependencies for the following librarie ...

  3. 有关fgetc配合feof逐行读取文件最后一行读取两遍的错觉?

    最近在做一个wifiap设置的接口,用户首先获取到当前wifi 热点的ssid 和pwd,然后修改,保存. 获取信息的时候是fopen对应的hostapd.conf文件,逐行读取,查找匹配的参数. 修 ...

  4. PicGo+Gitee(码云)中的404错误解决方案

    今天在用PicGo配置Gitee时,出现了404问题,记录一下解决方案. 安装与配置 PicGo默认是不支持Gitee的,只能通过安装插件来进行支持.我这里安装的插件是Gitee. 在图床设置---& ...

  5. 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践

    Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...

  6. Spring Cloud Gateway实战之一:初探

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<Spring Cloud Gateway实 ...

  7. Netty数据如何在 pipeline 中流动

    前言 在之前文章中,我们已经了解了pipeline在netty中所处的角色,像是一条流水线,控制着字节流的读写,本文,我们在这个基础上继续深挖pipeline在事件传播 Unsafe对象 顾名思义,u ...

  8. 痞子衡嵌入式:在IAR开发环境下RT-Thread工程函数重定向失效分析

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下RT-Thread工程函数重定向失效分析. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  9. oracle 与 前台 md5

    创建函数: CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BE ...

  10. [hdu7081]Pty loves book

    建立ac自动机,令$S_{x}$为以根到$x$的路径所构成的字符串以及$L_{x}=|S_{x}|,W_{x}=\sum_{1\le i\le m,t_{i}为S_{x}的后缀}w_{i}$,那么不难 ...