一、变量

  1. '''
  2. 1.视图函数可以通过两种方式将变量传递给模板页面
  3. -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量keyn': '变量值n'})
  4. -- render(request, 'test_page.html', locals())
  5. # locals() 就是将视图函数中的所有变量都传递给模板页面
  6.  
  7. 2.模板页面中对变量的使用
  8. def dtl(request):
  9. num = 3.14
  10. ss = '大碗宽面'
  11. # return render(request, 'django_dtl.html', {'number': num, 'ss': ss})
  12. #上述方法必须用key取值
  13.  
  14. result = True
  15. list = [1, 2, 3, 4, 5]
  16. dic = {'name': 'henry', 'age': 24}
  17.  
  18. # 函数不能带有参数,模板中{{ fn }} 本质就是调用函数拿到函数值(函数的返回值)
  19. def fn():
  20. return "fn function"
  21.  
  22. class Person:
  23. name = "henry"
  24. def __str__(self):
  25. return "这是Person类"
  26. p = Person()
  27. # locals()存放当前作用域中所有的名字
  28. return render(request, 'django_dtl.html', locals())
  29. '''
  30. '''
  31. <li>{{ num }}</li> #3.14
  32. <li>{{ list }} -- {{ list.0 }}</li> #[1, 2, 3, 4, 5] -- 1
  33. <li>{{ dic }} -- {{ dic.age }}</li> #{'name': 'henry', 'age': 24} -- 24
  34. <li>{{ fn }}</li> #fn function
  35. <li>{{ Person }} -- {{ Person.name }}</li>
  36. # Person => Person() => __str__的返回值 Person.name = "henry"
  37. <li>{{ 123 }}</li> # 也可以直接写数字、字符串、布尔值
  38. '''

二、过滤器(filter)

  1. '''
  2. 1.语法:
  3. -- {{ 变量|过滤器1[[:参数]|...|过滤器n[:参数]] }}
  4. -- 注:过滤器可以串联操作,可以拥有0个或1个参数
  5.  
  6. 2.常见内置filter
  7. -- 增加 add:num #{{ num |add:1|add:2 }}
  8.  
  9. -- 字符串长度 length #{{ ss|length }}
  10.  
  11. -- 默认值 default:'默认值'
  12. # {{ number|default:"number不存在或值为False" }} 变量不存在或值为False,会返回number的默认值,否则返回number本身的值
  13.  
  14. -- 全大写 upper #{{ 'Abc'|upper }} 结果:ABC
  15.  
  16. -- 全小写 lower #{{ 'Abc'|lower }} 结果:abc
  17.  
  18. -- 切片 slice:'1:-1' #{{ '123456789'|slice:'1:-1' }} 结果:2345678
  19.  
  20. -- 将数字转换为文件大小 filesizeformat
  21. #file_size=1024
  22. #<li>{{ file_size|filesizeformat}}</li> 结果:1.0kb
  23.  
  24. #file_size = 1024*1024
  25. #<li>{{ file_size|filesizeformat}}</li> 结果:1.0 MB
  26.  
  27. -- 字符串隐藏 truncatechars:13 # 只显示10个字符,后置字符都用...来替代
  28. #<li>{{ '123456789'|truncatechars:5 }}</li> 结果:12...
  29.  
  30. -- 时间 date:'Y-m-d'
  31. #time = datetime.datetime.now()
  32. #print(time) 结果:2019-03-01 18:58:00.597804
  33. # <li>{{ time }}</li> 结果:March 1, 2019, 6:58 p.m.
  34. #<li>{{ time|date:'Y-m-d' }}</li> 结果:2019-03-01
  35.  
  36. -- 转换原意 safe
  37. #<li>{{ time|safe }}</li> 结果:2019-03-01 18:58:00.597804
  38.  
  39. #link = '<a href="https://www.baidu.com/">link</a>'
  40. #<li>{{ link }}</li> 结果:<a href="https://www.baidu.com/">link</a>
  41. #<li>{{ link|safe }}</li> 结果:link 一个可以点击跳转的连接
  42. '''

三、标签(tag)

  1. '''
  2. 1.语法:
  3. -- {% 关键词 arg1 ... argn %}
  4.  
  5. 2.常用:
  6. -- 反向解析url {% url 'namespace:url_name' arg1 arg2 %}
  7. eg: url(r'test/(\d+)/(\d+)/(\d+)/$', views.dtl, name='test')
  8. {% url 'test' 1 2 3 %} => /test/1/2/3/
  9.  
  10. -- 当前时间now {% now 'Y-m-d' %}
  11. eg:<li>{% now 'Y-m-d' %}</li> => 2019-03-01
  12.  
  13. -- 起别名with {% with '后面的别名flag就代表我' as flag %} {{ flag }} {% endwith %}
  14. eg:link = '<a href="https://www.baidu.com/">link</a>'
  15. {% with link|safe as lk %}
  16. {{ lk }}
  17. {{ lk }}
  18. {{ lk }}
  19. {% endwith %}
  20. =>link link link
  21.  
  22. {% with '123456789' as n %}
  23. {{ n }}
  24. {{ n }}
  25. {{ n }}
  26. {% endwith %}
  27. =>123456789 123456789 123456789
  28. {% with '123456789' as n %} 相当于 {% with n='123456789 %} n与=之间不能有空格
  29.  
  30. -- Django CSRF认证 {% csrf_token %}
  31. #该页面为Django自身渲染, 渲染时告诉页面自身的认证条件,该页面发送post请求都可以通过认证
  32. 有了这行代码我们就可以不用注销中间件中的csrf认证,从而达到发送post请求的效果
  33.  
  34. '''

四、条件分支tag

  1. '''
  2. 语法:
  3. {% if 条件1 %}
  4. 结论1
  5. {% elif 条件2 %}
  6. 结论2
  7. {% else %}
  8. 结论n
  9. {% endif %}
  10.  
  11. 注:
  12. 1. if的条件可以添加filter
  13. 2. 可以嵌套
  14.  
  15. eg:
  16. {% with 9|add:1 as num %}
  17.  
  18. {% if num > 10 %}
  19. <p>num值大于10</p>
  20. {% elif num == 10 %}
  21. <p>num值等于10</p>
  22. {% else %}
  23. {% if num > 5 %}
  24. <p>num介于5与10</p>
  25.  
  26. {% else %}
  27. <p>num不大于5</p>
  28. {% endif %}
  29. {% endif %}
  30.  
  31. {% endwith %}
  32.  
  33. =>num值等于10
  34. '''

五、迭代器tag

  1. '''
  2. {% for foo in iterate %}
  3. {{ forloop }}
  4. {% empty %}
  5. 可迭代对象为空
  6. {% endfor %}
  7.  
  8. 注:
  9. 1. iterate为可迭代对象
  10. 2. iterate可以添加filter
  11. 3. forloop变量为存放迭代信息的字典
  12. {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
  13. 父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
  14. 4. empty分支会在可迭代对象不存在或空时执行
  15. eg: {% for n in 31425|make_list %}
  16. <p>{{ forloop }}</p>
  17. <p>第{{ forloop.counter }}次迭代</p>
  18. <p>{{ n }}</p>
  19. <hr>
  20. {% endfor %}
  21.  
  22. eg:ll = [[1, 2, 3], [4, 5, 6]]
  23. {% for l in ll %}
  24. {% for n in l %}
  25. <p>外层{{ forloop.parentloop.counter }} - 内层{{ forloop.counter }}</p>
  26. {{ n }}
  27. <hr>
  28. {% endfor %}
  29. {% empty %}
  30. <p>迭代的ll不存在或为空</p>
  31. {% endfor %}
  32. 外层1 - 内层1
  33. 1
  34.  
  35. 外层1 - 内层2
  36. 2
  37.  
  38. 外层1 - 内层3
  39. 3
  40.  
  41. 外层2 - 内层1
  42. 4
  43.  
  44. 外层2 - 内层2
  45. 5
  46.  
  47. 外层2 - 内层3
  48. 6
  49. '''

六、自定义过滤器与标签

  1. '''
  2. 步骤:
  3. 1. 在注册的app下创建templatetags包
  4. 2. 在模板中自定义模块py文件,如:owen_tags.py
  5. 3. 要在使用自定义filter与tag的模板页面中加载自定义模块py文件,案例:{% load owen_tags %}
  6.  
  7. 4. 自定义filter语法
  8. from django.template import Library
  9. register = Library()
  10. @register.filter(name='jump')
  11. def owen_jump(value, arg):
  12. try:
  13. return value * int(arg)
  14. except (ValueError, TypeError):
  15. return ''
  16.  
  17. 5. 自定义tag语法
  18. @register.simple_tag(name='add_two')
  19. def owen_add(arg1, arg2):
  20. try:
  21. return int(arg1) + int(arg2)
  22. except (ValueError, TypeError):
  23. try:
  24. return arg1 + arg2
  25. except Exception:
  26. return ''
  27.  
  28. 6. 在加载了自定义模块py文件的模板页面中使用,案例:
  29. {{ 10|jump:2}} # 10 * 2 =>20
  30. {{ 'a'|jump:3 }} #'a'*3 => 'aaa'
  31. {% add_two 10 20 %} # 10 + 20 =>30
  32. {% add_two 'hello' 'world' %} # 'hello'+'world' =>'helloworld'
  33. {% add_two 10 'dollor' %} #没有返回值,不是同类型,无法相加
  34.  
  35. '''

七、全系统过滤器(了解)

  1. {{ 123|add:"" }} value加上一个数值
  2. {{ "AB'CD"|addslashes }} 单引号加上转义号,一般用于输出到javascript
  3. {{ "abcd"|capfirst }} 第一个字母大写
  4. {{ "abcd"|center:"" }} 输出指定长度的字符串,并把值对中
  5. {{ "123spam456spam789"|cut:"spam" }} 查找删除指定字符串
  6. {{ value|date:"F j, Y" }} 格式化日期
  7. {{ value|default:"(N/A)" }} 值不存在,使用指定值
  8. {{ value|default_if_none:"(N/A)" }} 值是None,使用指定值
  9. {{ 列表变量|dictsort:"数字" }} 排序从小到大
  10. {{ 列表变量|dictsortreversed:"数字" }} 排序从大到小
  11. {{ string|escape }} 转换为html实体
  12. {{ 21984124|filesizeformat }} 1024为基数,计算最大值,保留1位小数,增加可读性
  13. {{ list|first }} 返回列表第一个元素
  14. {{ "ik23hr&jqwh"|fix_ampersands }} &转为&
  15. {{ 13.414121241|floatformat }} 保留1位小数,可为负数,几种形式
  16. {{ 13.414121241|floatformat:"" }} 保留2位小数
  17. {{ 23456 |get_digit:"" }} 从个位数开始截取指定位置的1个数字
  18. {{ list|join:", " }} 用指定分隔符连接列表
  19. {{ list|length }} 返回列表个数
  20. {% if 列表|length_is:"" %} 列表个数是否指定数值
  21. {{ "ABCD"|linebreaks }} 用新行用
  22. {{ "ABCD"|linebreaksbr }} 用新行用 标记包裹
  23. {{ 变量|linenumbers }} 为变量中每一行加上行号
  24. {{ "abcd"|ljust:"" }} 把字符串在指定宽度中对左,其它用空格填充
  25. {{ "ABCD"|lower }} 小写
  26. {{ "abcdefghijklmnopqrstuvwxyz"|phone2numeric }} 把字符转为可以对应的数字??
  27. {{ 列表或数字|pluralize }} 单词的复数形式,如列表字符串个数大于1,返回s,否则返回空串
  28. {{ 列表或数字|pluralize:"es" }} 指定es
  29. {{ 列表或数字|pluralize:"y,ies" }} 指定ies替换为y
  30. {{ object|pprint }} 显示一个对象的值
  31. {{ 列表|random }} 返回列表的随机一项
  32. {{ string|removetags:"br p div" }} 删除字符串中指定html标记
  33. {{ string|rjust:"" }} 把字符串在指定宽度中对右,其它用空格填充
  34. {{ 列表|slice:":2" }} 切片
  35. {{ string|slugify }} 字符串中留下减号和下划线,其它符号删除,空格用减号替换
  36. {{ 3|stringformat:"02i" }} 字符串格式,使用Python的字符串格式语法
  37. {{ "EABCD"|striptags }} 剥去[X]HTML语法标记
  38. {{ 时间变量|time:"P" }} 日期的时间部分格式
  39. {{ datetime|timesince }} 给定日期到现在过去了多少时间
  40. {{ datetime|timesince:"other_datetime" }} 两日期间过去了多少时间
  41. {{ datetime|timeuntil }} 给定日期到现在过去了多少时间,与上面的区别在于2日期的前后位置。
  42. {{ datetime|timeuntil:"other_datetime" }} 两日期间过去了多少时间
  43. {{ "abdsadf"|title }} 首字母大写
  44. {{ "A B C D E F"|truncatewords:"" }} 截取指定个数的单词
  45. {{ ""|truncatewords_html:"" }} 截取指定个数的html标记,并补完整
  46. {{ list|unordered_list }} 多重嵌套列表展现为html的无序列表
  47. {{ string|upper }} 全部大写
  48. {{ string|urlize }} URLs由纯文本变为可点击的链接。(没有实验成功)
  49. {{ string|urlizetrunc:"" }} 同上,多个截取字符数。(同样没有实验成功)
  50. {{ "B C D E F"|wordcount }} 单词数
  51. {{ "a b c d e f g h i j k"|wordwrap:"" }} 每指定数量的字符就插入回车符
  52. {{ boolean|yesno:"Yes,No,Perhaps" }} 对三种值的返回字符串,对应是 非空,空,None

一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)的更多相关文章

  1. margin标记可以带一个、二个、三个、四个参数,各有不同的含义。

    margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上.下.左.右各20px.) margin: 20px 40px;(上.下20px:左.右40px.) ...

  2. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  3. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器

    一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...

  4. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  5. 【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

    一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不 ...

  6. Java Spring Boot VS .NetCore (二)实现一个过滤器Filter

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  7. JavaWeb学习笔记(二十二)—— 过滤器filter

    一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...

  8. 三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))

    1.建立RequestWrapper类 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; impo ...

  9. Filter学习(二)Filter使用Decorator设计模式

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

随机推荐

  1. (已解决)iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)

    Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...

  2. php 下载完成后删除文件

    最近遇到一个需求:下载用户上传的图片,但是图片不断更新. 1.需要将图片从图片服务器下载到网站后台服务器 2.压缩文件夹生成zip压缩包 3.下载压缩包 4.删除压缩包和临时文件夹 其中遇到了一个问题 ...

  3. 解决React Native使用Fetch API请求网络报Network request failed

    问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...

  4. LeetCode83.删除排序链表中的重复的元素

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  5. vue搭建环境并创建项目

    1.>npm install @vue/cli -g 2.创建项目A a.>vue ui b.在弹出的管理界面创建项目 或 a.npm install -g @vue/cli-init b ...

  6. 4.构造Thread对象你也许不知道的几件事

    1.Thread类对象只有在调用了start()方法之后,JVM虚拟机才会给我们创建一个真正的线程!否则就不能说是创建了线程!也就是说new Thread()之后,此时实际上在计算机底层,操作系统实际 ...

  7. Mysql事务及锁

    一.事务(Transaction)及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性:1.原子性(Atomicity):事务是一个原子操作单 ...

  8. EXTENDED LIGHTS OUT (高斯消元)

    In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual ...

  9. Python大神成长之路: 第三次学习记录 集合 函数 装饰 re

    学习记录day03   字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上)     集合是一个无序的,不重复的数据组合,它的主要作用如 ...

  10. django之路由分析

    URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. URLconf配置 基本格式: from django.conf.urls i ...