django 之模板层
1. 模板语法之变量
- 格式:
{{ 变量名 }}
句点符,深度查询(可以点到方法,不要加括号,只能是无参的方法) - 代码
视图函数:
from django.shortcuts import render
from django.utils.safestring import mark_safe
class Person:def __init__(self,name):self.name=name@classmethoddef 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=20ll=['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=Truelqz=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 datetimenow=datetime.datetime.now()file=1024*1024*1024return 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的页面
转载于:https://www.cnblogs.com/quqinchao/p/11220129.html
django 之模板层相关推荐
- Django之模板层
视图层后续: FBV与CBV FBV:是基于函数的视图 我们前面写视图都是用函数写的,也就是FBV CBV:是基于类的视图 urls.py中: url(r'^login/',views.MyLogin ...
- Django的模板层
一 模板语法之变量 在Django模板中遍历复杂数据结构的关键是句点字符,语法: {{var_name}} views.py: def index(request): import datetimes ...
- django,cbv,模板层
今日内容: 1,三板斧 2,FBV与CBV 3,Django中settings源码 4,模板层 模板语法 过滤器 标签 自定义标签, 自定义过滤器 , 自定义inclu ...
- Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...
- django模板层 (标签,过滤器,自定义inclusion_tag,模板的继承与导入)
后端朝前端页面传递数据的方式:return HttpResponse(''字符串类型) 具体参照上一篇博客的视图层此处主要介绍通过 render方式传值:第一种: return render(requ ...
- Django 模板层
模板简介 模板就是一个文本,用于分离文档的表现形式和内容 django里的模板可以理解为:HTML代码+模板语法 一.模板语法之变量 模板语法的注释 不会展示到前端页面:{#模板语法注 ...
- Django(10)-模板层的变量和标签
Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...
- Django之路由层、视图层、模板层介绍
一.Django请求生命周期 1.路由层urls.py Django 1.11版本 URLConf官方文档 1.1 urls.py配置基本格式 from django.conf.urls import ...
- Django框架的模板层详解
目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...
- django之template模板层-60
django之template模板层-60 一.模板语言的变量 views.py def index(request): #模板语言的变量 name = 'Yven' addr = False age ...
最新文章
- 【面试】上中断和下中断
- 2010 eWEEK 年度产品
- java jsch 密钥登陆_我们可以使用JSch进行基于SSH密钥的通信吗?
- python自动补全库_这个库厉害了,自动补全Python代码,节省50%敲码时间
- Restful Service 中 DateTime 在 url 中传递
- 注入点批量收集工具_如何批量处理短视频,剪辑片头片尾、加图片水印
- Pandas Index对象
- android ant build.xml实例
- Eclipse的使用-Eclipse的简单使用,需要的来看看吧!
- IntelliJ IDEA插件的Jrebel激活踩坑【内网离线使用】
- 如何将ape转换mp3格式
- python实现华氏温度和摄氏温度转换
- C语言lcd实现奥运五环编程,用C语言程序来设计奥运五环图案.doc
- python结巴分词 每个词一行,python-结巴分词+词云展示
- 扫地机器人的技术升级之路 自主规划清扫成主流
- 关于virtualbox虚拟电脑控制台严重错误解决方法。。。(博客园搬家至此,尚未整理)(六)
- Java实现蓝桥杯突击战
- 鸿蒙 手游sdk 开发教程
- 三个点带你解读Smartbi商业智能大数据分析平台
- 大题历年题合集-信息资源管理
热门文章
- 库存在,编译或运行时提示找不到,要配置LD_LIBRARY_PATH
- WIN7安装FreeSwitch,1.8版本无法安装,1.6版本成功
- 压缩软件能否加上忽略某些目录的功能
- 全网首发:C++中通过POST向服务器发送JSON的代码
- C的byte数组在python中的处理
- 电子设备的节能分析与设计
- LINUX安装7Zip
- 所有自然数相加的和是-1/12,你信吗?
- php jpgraph 中文,JPGraph 4.0(for PHP7)中文字体设置
- caffe(CPU版本)配置 及MNIST调用