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. VirtualBox问题解决合集 - [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message

    转载:https://blog.csdn.net/mychangee/article/details/104954262 问题描述:[drm:vmw_host_log [vmwgfx]] ERROR  ...

  2. LeetCode Weekly Contest 266

    第一题 题解:模拟题 class Solution { public: int countVowelSubstrings(string w) { int n = w.length(); int i = ...

  3. C++ 指针的引用和指向引用的指针

    指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形 ...

  4. Mysql基础教程:(七)MySQL基础练习

    MySQL基础练习 一.创建student和score表 CREATE TABLE student (id INT(10) NOT NULL PRIMARY KEY ,name VARCHAR(20) ...

  5. MySQL高级篇 | 分析sql性能

    在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越 ...

  6. SpringCloud升级之路2020.0.x版-31. FeignClient 实现断路器以及线程隔离限流的思路

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们实现了 FeignClient 粘合 resilience4j 的 Ret ...

  7. Charles--/安装/破解/支持https抓包

     一.安装破解Charles 1.下载charles4.0.2版本,下面的jar包需要和charles版本对应 2.下载地址:https://www.cr173.com/soft/494576.htm ...

  8. macos command 'clang' failed with exit status 1

    export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent

  9. c++学习笔记6(结构化程序设计)

    结构化程序设计 c语言使用结构化程序设计: 程序=数据结构+算法 程序有全局变量以及众多相互调用的函数组成 算法以函数的形式实现,用于对数据结构进行操作 结构化程序设计不足

  10. FZU ICPC 2020 寒假训练 3

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...