django 之模板层
1. 模板语法之变量
- 格式:
{{ 变量名 }}
句点符,深度查询(可以点到方法,不要加括号,只能是无参的方法) - 代码
视图函数:
from django.shortcuts import render
from django.utils.safestring import mark_safe
class Person:
def __init__(self,name):
self.name=name
@classmethod
def class_test(cls):
print('class method')
return 'class method'
def test(self):
print('method')
return self.name
# def __str__(self):
# return self.name
def index(request):
ss='lqz is big'
i=20
ll=['lqz',18,[1,2,[2,3]]]
ll4=[[1,2,3],[2,3,4],[1,2,9]]
dic={'name':'lqz','age':18,'t':[1,2,[2,3]]}
b=True
lqz=Person('lqz')
egon=Person('egon')
xiaohou=Person('xiaohou')
monkey=Person('monkey')
ll2=[lqz,egon,xiaohou,monkey]
dic2={'lqz':lqz,'egon':egon}
# print(lqz.class_test())
# print(dic['name'].upper)
ll3=[]
ss2=''
ss3='<a href="https://www.baidu.com">点我</a>' #链接
ss3=mark_safe(ss3) #不用转义网页正常显示
import datetime
now=datetime.datetime.now()
file=1024*1024*1024
return render(request,'index.html',locals()) #locals渲染所有的内容
# return render(request,'index.html',{'ss':ss,}) #指定单个内容渲染
模板:
<body>
<hr>
<p>字符串:{{ ss }}</p>
<p>数字:{{ i }}</p>
<p>列表:{{ ll }}</p>
句点符,做深度查询
<p>列表第2个值:{{ ll.2.2.0}}</p>
<p>布尔类型:{{ b}}</p>
<p>字典:{{ dic }}</p>
<p>字典取值:{{ dic.age }}</p>
<p>字典取值:{{ dic.t.2.1 }}</p>
<p>对象:{{ lqz }}</p>
<p>对象取值:{{ lqz.name }}</p>
执行方法,不要加括号,
<p>对象方法:{{ lqz.test }}</p>
<p>类方法:{{ lqz.class_test }}</p>
注释:前端看不到,django给处理了
{#<p>类方法:{{ Person}}</p>#}
<p>列表对象{{ ll2 }}</p>
<p>列表对象取值{{ ll2.1 }}</p>
<p>列表对象取值,在取值{{ ll2.1.name }}</p>
<p>对象字典{{ dic2 }}</p>
<p>对象字典取值{{ dic2.egon.name }}</p>
<p>空列表的情况{{ ll3 }}</p>
直接替换成空
<p>空字符串的情况{{ ss2 }}</p>
<p>a标签 {{ ss3 }}</p>
<h4>字典:{{ ss.upper }}</h4>
<h4>字典:{{ dic.name.upper }}</h4>
2.模板语法之过滤器
模板:
(1) date
注:冒号后不能加空格 now是第一个参数,冒号后面是第二个参数
<p>date过滤器 {{ now|date:'Y-m-d:H:i:s' }}</p>
<p>date过滤器 {{ now|date }}</p>
(2)default
如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
<p>default过滤器 {{ ss2|default:'字符串没有值' }}</p>
<p>default过滤器 {{ ll3|default:'列表没有值' }}</p>
(3)length 返回值的长度。它对字符串和列表都起作用
<p>length过滤器 {{ ll2|length }}</p>
(4) filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
<p>filesizeformat过滤器 {{ file|filesizeformat }}</p>
<p>filesizeformat过滤器 {{ 1024|filesizeformat }}</p>
(5)slice 切片操作(同py数据类型切片)
<p>slice过滤器 {{ 'lqzisbig'|slice:'1:9' }}</p>
(6)truncatechars 截断字符
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾
<p>truncatechars过滤器 {{ 'lqzisbigdddddddeee'|truncatechars:9 }}</p>
<p>truncatewords过滤器: {{ 'lqz is big and egon is small'|truncatewords:3 }}</p>
(7)safe 让django 不要转义网页,正常显示
<p>safe过滤器: {{ ss3|safe }}</p>
{#可以在视图函数里处理 ss3 = mark_safe(ss3)#}
(8)add 俩参数可以传字符串和数字,具体详见源码
<p>add过滤器: {{ 12|add:"3" }}</p> 结果:15
<p>add过滤器: {{ 'eee'|add:"3rrr" }}</p> 结果:eee3rrr
3. 模板语法之标签
3.1 for 标签
<h1>模板语法之标签</h1>
{# ll = ['lqz', 18, [1, 2, [2, 3]]]#}
{% for foo in ll %}
<p>{{ forloop }}</p>
{# 循环序号可以通过{{forloop}}显示 #}
{# {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 3, 'revcounter0': 2, 'first': True, 'last': False}#}
<p>{{ forloop.counter }}</p> #当前循环索引从1开始计数 123
<p>{{ forloop.counter0 }}</p> #从0开始 012
<p>{{ forloop.revcounter }}</p> 321
<p>{{ forloop.revcounter0 }}</p> 210
<p>{{ forloop.first }}</p> #判断每次循环出的数是否是第一或者最后一次
<p>{{ forloop.last }}</p>
{# 遍历每一个元素#}
<p>{{ foo }}</p>
{# 判断实例:#}
{% if forloop.first %}
lqz is big
{% elif forloop.last %}
两人都小
{% else %}
egon is small
{% endif %}
{% endfor %} #必须要有结尾
#parentloop用法
{# ll4 = [[1, 2, 3], [2, 3, 4], [1, 2, 9]]#}
{% for foo in ll4 %}
{% for i in foo %}
<p>{{ forloop }}</p>
{# 在内层循环中拿到外层循环的forloop#}
<p>{{ forloop.parentloop }}</p>
{% endfor %}
{% endfor %}
# 循环出字典的值
{% for i in dic.values %}
<p>{{ i }}</p>
{% endfor %}
<hr>
{% for i in dic.keys %}
<p>{{ i }}</p>
{% endfor %}
<hr>
{% for key,value in dic.items %}
<p>{{ key }}---->{{ value }}</p>
{% endfor %}
3.2 for... empty
- 作用:for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作
<!--视图中ll3=[]-->
{% for foo in ll3 %}
<p>{{ foo }}</p>
{% empty %} #要放在在for循环中,如果循环的对象为空,往下执行结果为'没有值'
没有值
{% endfor %}
3.3 with
- 作用:使用一个简单的名字缓存一个复杂的变量
{% with tt=dic.name %}
或者{% with dic.name as tt %}
给取出的内容重新赋值给tt
<p>{{ dic.name }}</p>
<p>{{ tt }}</p>
{% endwith %}
3.4 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判断。
4. 自定义过滤器和标签
4.1 自定义过滤器
- 步骤
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数 addstr(用register.filter()装饰)
7 模板内容:
{% load my_test %}
{{'lqz'|addstr:'isbig' }} #最多只能传两个参数
- 代码:
my_test文件:
from django import template
register=template.Library()
@register.filter(name=tt)
def addrstr(x,y):
return x+y
模板:
<h1>自定义过滤器</h1>
{% load my_test %}
{# 过滤器可以是函数名,也可以是name指定的值 @register.filter(name=tt)#}
{{ 'lqz'|addrstr:'isbig' }} #lqzisbig 最多只能传两个参数
4.2 自定义标签
- 步骤:
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数
@register.simple_tag(name='yy')
def my_sum(x,y,z,i):
return x+y+z+i
7 模板:
{% load my_test %}
{% yy 12 34 56 78 %} #以空格做分割,传参数
代码:
my_test文件:
from django import template
@register.simple_tag(name='hh')
def sun(x,y,z):
return x+y+z
模板:
{% load my_test %}
{% hh 5 4 7 %} #以空格作分割,传参数
- 自定义的过滤器,可以放在if判断里,
自定义的标签,不能放在if判断里条件里
4.2 静态文件导入
方式一:
<link rel="stylesheet" href="/static123/mycss.css">
方式二:
{% load static %}
<link rel="stylesheet" href="{% static 'mycss.css'%}">
方式三:
{% load static %}
<link rel="stylesheet" href="{% get_static_prefix %}dd/ss/mycss.css">
5. 模板导入与继承
5.1 模板导入
1 把公共部分,放到html里,比如叫 left.html
2 想在哪里用 导入{% include 'left.html' %}
5.2 模板继承
1 写一个母模板 base.html
2 要更改的地方在block标签编辑
{% block base %}
母模板的盒子里也可以写东西
{% endblock %}
3 在其他文件中调用母模板{%extends 'base.html' %}
4 建盒子编辑自己的内容;
{% block base %}
自己的东西
{% endblock my_head%}
5 用母版里的内容({{block.super}} 放在那,原来母版里的东西,就会渲染在哪)
{% block base %}
{{block.super}}
自己的东西
{% endblock my_head%}
注:(1)如过不继承母模板盒子,它会用原来的内容;如果继承了,没写自己的东西,它会空白;写自己的内容就是什么内容,
通过{{block.super}},可渲染出原来母模板的内容
(2)盒子再继承时,跟顺序无关
6. inclusion_tag
- 作用:返回html代码片段
- 步骤
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 @register.inclusion_tag('test.html')
def my_inclusion(n):
data=[]
for i in range(n):
data.append('第%s行'%i)
return {'data':data}
7 写test.html页面
<ul>
{% for choice in data %}
<li>{{ choice }}</li>
{% endfor %}
</ul>
8 视图函数中要渲染的页面
{% load my_test %}
{% my_inclusion 10 %} #它会返回html的页面
django 之模板层的更多相关文章
- python 全栈开发,Day69(Django的视图层,Django的模板层)
昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...
- Django的模板层简介
Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...
- 04-01 Django之模板层
Django之模板层 一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.cs ...
- Django框架-模板层
Django框架-模板层 一.模板语法传值 1.验证是否python所有的数据类型都可以传递到前端 locals()的妙用:该方法虽然好用,但是在某些情况下会造成资源的浪费 结论:整型.浮点型.字符串 ...
- Django之模板层细说
django的模板层,基于我们前面学习的内容,也知道主要语法是{{变量相关}}{%逻辑相关%},那么具体还有哪些内容呢?且听我娓娓道来. 模板层(模板语法) 标签 过滤器 自定义标签,过滤器,incl ...
- Django基础模板层(75-76)
Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板 ** return render(request, 'index.html' ...
- Django基础——模板层(template) (Day67)
阅读目录 变量 标签 自定义过滤器和标签 模板层(template) 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. 1 2 3 4 ...
- 5、Django之模板层
一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.css等数据给浏览器进行渲 ...
- 053.Python前端Django框架模板层
模板层 一 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法: {{ var_name }} [root@node10 mysite]# cat app01/urls. ...
- Django的模板层
一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
随机推荐
- Java多线程面试15道
Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是 ...
- Linux 通配符和特殊符号
- webpack请求文件路径代理
在开发模式下,访问页面请求会跑到根路径,因为写的都 ./images 而index又在根目录, 所以访问地址会是 http://localhost:8080/images/abc.jpg 而实际 ...
- Html5 学习笔记 --》css3 学习
在开发任务中最好不要使用前缀 可以设置发散图形 圆形 方形等 边框图片效果: CSS3 变形效果: Css3 3D立体变形: css 设置 CSS3 过度效果: div:hover { backgro ...
- CRF条件随机场在机器视觉中的解释
CRF是一种判别模型,本质是给定观察值集合的马尔科夫随机场(MRF),而MRF是加了马尔科夫性质限制的随机场. 马尔科夫性质:全局.局部.成对 随机场:看做一组随机变量的集合(对应于同一个样本空间), ...
- VB - 修改注册表
Vbs中修改注册表的语句主要有: 1.读注册表的关键词和值: 可以通过把关键词的完整路径传递给wshshell对象的regread方法.例如: set ws=wscript.createobject( ...
- 洛谷 P1197 [JSOI2008]星球大战——并查集
先上一波题目 https://www.luogu.org/problem/P1197 很明显删除的操作并不好处理 那么我们可以考虑把删边变成加边 只需要一波时间倒流就可以解决拉 储存删边顺序倒过来加边 ...
- python新手上车001
python新手上车001 一般建议: 1.下载:从https://www.python.org/downloads/windows/ python官网进行下载建议就从3.7.2开始吧(我从这个版本 ...
- 49-python基础-python3-列表-常用列表统计函数-max()-min()-sum()
max() min() sum() 1-数字列表统计 实例: 2-字符串列表统计. 根据ASCII码大小统计字符串列表的min()和max(). 注意:sum()函数无法统计字符串列表. 实例:
- Python之字节到大整数的打包与解包
需求:处理一个拥有128位长的16个元素的字节字符串 将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序: # 为了将bytes解析为整数,使用 int.f ...