一、变量

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

二、过滤器(filter)

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

三、标签(tag)

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

四、条件分支tag

'''
语法:
{% if 条件1 %}
结论1
{% elif 条件2 %}
结论2
{% else %}
结论n
{% endif %} 注:
1. if的条件可以添加filter
2. 可以嵌套 eg:
{% with 9|add:1 as num %} {% if num > 10 %}
<p>num值大于10</p>
{% elif num == 10 %}
<p>num值等于10</p>
{% else %}
{% if num > 5 %}
<p>num介于5与10</p> {% else %}
<p>num不大于5</p>
{% endif %}
{% endif %} {% endwith %} =>num值等于10
'''

五、迭代器tag

'''
{% for foo in iterate %}
{{ forloop }}
{% empty %}
可迭代对象为空
{% endfor %} 注:
1. iterate为可迭代对象
2. iterate可以添加filter
3. forloop变量为存放迭代信息的字典
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
4. empty分支会在可迭代对象不存在或空时执行
eg: {% for n in 31425|make_list %}
<p>{{ forloop }}</p>
<p>第{{ forloop.counter }}次迭代</p>
<p>{{ n }}</p>
<hr>
{% endfor %} eg:ll = [[1, 2, 3], [4, 5, 6]]
{% for l in ll %}
{% for n in l %}
<p>外层{{ forloop.parentloop.counter }} - 内层{{ forloop.counter }}</p>
{{ n }}
<hr>
{% endfor %}
{% empty %}
<p>迭代的ll不存在或为空</p>
{% endfor %}
外层1 - 内层1
1 外层1 - 内层2
2 外层1 - 内层3
3 外层2 - 内层1
4 外层2 - 内层2
5 外层2 - 内层3
6
'''

六、自定义过滤器与标签

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

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

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

    由于Cocos引擎中,游戏切入后台后定时器后停掉会让某个Animation动作停止. 导致当重新进入游戏时,看到的不是你想要的画面.或者定时器倒计时的时间对不上等问题. cc.game.EVENT_H ...

  2. RMAN备份策略与异机恢复一例(续篇)

    本文是<RMAN备份策略与异机恢复一例>的续篇,继续实验验证,最终实现两个需求: 1.异机恢复临时测试的小库 2.传输归档时,实现增量传输 1.异机恢复临时测试的小库 之前异机恢复的需求已 ...

  3. 软工网络15团队作业4——Alpha阶段敏捷冲刺2.0

    软工网络15团队作业4--Alpha阶段敏捷冲刺2.0 1.提供当天站立式会议照片一张. 2.每个人的工作 成员 昨天已完成 今天计划完成 郭炜埕 熟悉微信web开发者工具 完成新建话题界面的设计 郑 ...

  4. 关于ajax原理介绍

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  5. C#基础知识整理

    年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...

  6. ASP.Net 中操作Ajax

    有时候,越深入去了解一个点,越发觉得自己无知,而之前当自己晓得一两个片面的点还洋洋自得,殊不知,这是多么讽刺,JQuery中有很多优势,比如异步提交值,部分刷新,给用户很好的体验感.目前为止,大部分项 ...

  7. python操作Mysql数据库示例

    python库:pymysql 安装:install pymysql.mysql数据库 一.连接数据库.创建speder库.查询版本. import pymysql ##链接数据库 db = pymy ...

  8. python os.path.expanduser()

    # Expand the user's home directory

  9. 20165316 实验一 Java开发环境的熟悉

    实验一 Java开发环境的熟悉 基础-Java环境的构建和简单程序 实验要求 建立"自己学号exp1"的目录 在"自己学号exp1"目录下建立src,bin等目 ...

  10. JSVC技术

    如果我们的某个项目时web项目,我们很容易就可以放置在Tomcat中进行启动. 可是如果我们的项目不是web项目,我们又需要在单独启动时,我们又应该怎么办呢?     引出了我们今天的主人公:JSVC ...