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 之模板层相关推荐

  1. Django之模板层

    视图层后续: FBV与CBV FBV:是基于函数的视图 我们前面写视图都是用函数写的,也就是FBV CBV:是基于类的视图 urls.py中: url(r'^login/',views.MyLogin ...

  2. Django的模板层

    一 模板语法之变量 在Django模板中遍历复杂数据结构的关键是句点字符,语法: {{var_name}} views.py: def index(request): import datetimes ...

  3. django,cbv,模板层

    今日内容:  1,三板斧  2,FBV与CBV  3,Django中settings源码  4,模板层   模板语法   过滤器   标签   自定义标签,   自定义过滤器 ,   自定义inclu ...

  4. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

  5. django模板层 (标签,过滤器,自定义inclusion_tag,模板的继承与导入)

    后端朝前端页面传递数据的方式:return HttpResponse(''字符串类型) 具体参照上一篇博客的视图层此处主要介绍通过 render方式传值:第一种: return render(requ ...

  6. Django 模板层

    模板简介 模板就是一个文本,用于分离文档的表现形式和内容 django里的模板可以理解为:HTML代码+模板语法 一.模板语法之变量 模板语法的注释         不会展示到前端页面:{#模板语法注 ...

  7. Django(10)-模板层的变量和标签

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

  8. Django之路由层、视图层、模板层介绍

    一.Django请求生命周期 1.路由层urls.py Django 1.11版本 URLConf官方文档 1.1 urls.py配置基本格式 from django.conf.urls import ...

  9. Django框架的模板层详解

    目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...

  10. django之template模板层-60

    django之template模板层-60 一.模板语言的变量 views.py def index(request): #模板语言的变量 name = 'Yven' addr = False age ...

最新文章

  1. 【面试】上中断和下中断
  2. 2010 eWEEK 年度产品
  3. java jsch 密钥登陆_我们可以使用JSch进行基于SSH密钥的通信吗?
  4. python自动补全库_这个库厉害了,自动补全Python代码,节省50%敲码时间
  5. Restful Service 中 DateTime 在 url 中传递
  6. 注入点批量收集工具_如何批量处理短视频,剪辑片头片尾、加图片水印
  7. Pandas Index对象
  8. android ant build.xml实例
  9. Eclipse的使用-Eclipse的简单使用,需要的来看看吧!
  10. IntelliJ IDEA插件的Jrebel激活踩坑【内网离线使用】
  11. 如何将ape转换mp3格式
  12. python实现华氏温度和摄氏温度转换
  13. C语言lcd实现奥运五环编程,用C语言程序来设计奥运五环图案.doc
  14. python结巴分词 每个词一行,python-结巴分词+词云展示
  15. 扫地机器人的技术升级之路 自主规划清扫成主流
  16. 关于virtualbox虚拟电脑控制台严重错误解决方法。。。(博客园搬家至此,尚未整理)(六)
  17. Java实现蓝桥杯突击战
  18. 鸿蒙 手游sdk 开发教程
  19. 三个点带你解读Smartbi商业智能大数据分析平台
  20. 大题历年题合集-信息资源管理

热门文章

  1. 库存在,编译或运行时提示找不到,要配置LD_LIBRARY_PATH
  2. WIN7安装FreeSwitch,1.8版本无法安装,1.6版本成功
  3. 压缩软件能否加上忽略某些目录的功能
  4. 全网首发:C++中通过POST向服务器发送JSON的代码
  5. C的byte数组在python中的处理
  6. 电子设备的节能分析与设计
  7. LINUX安装7Zip
  8. 所有自然数相加的和是-1/12,你信吗?
  9. php jpgraph 中文,JPGraph 4.0(for PHP7)中文字体设置
  10. caffe(CPU版本)配置 及MNIST调用