Django的模板渲染(一):https://developer.aliyun.com/article/1495681
date
格式化,如果 value=datetime.datetime.now()
{{ value|date:“Y-m-d H:i:s”}} 年月日 时分秒
关于时间日期的可用的参数(除了Y,m,d等等)还有很多,有兴趣的可以去查查看看。
分钟用 i 获取
safe
xss攻击. 跨站脚本攻击 现在浏览器对于用户评价的标签全部存为字符串,预防xss攻击
Django的模板中在进行模板渲染的时候会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全,
django担心这是用户添加的数据,比如如果有人给你评论的时候写了一段js代码,
这个评论一提交,js代码就执行啦,这样你是不是可以搞一些坏事儿了,
写个弹窗的死循环,那浏览器还能用吗,是不是会一直弹窗啊,这叫做xss攻击,所以浏览器不让你这么搞,给你转义了。
但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,
这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。
为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
我们去network那个地方看看,浏览器看到的都是渲染之后的结果,通过network的response的那个部分可以看到,
这个a标签全部是特殊符号包裹起来的,并不是一个标签,这都是django搞得事情。
默认Django会把后端传来的标签设为字符串在前端展示
如果我们想实现展示标签效果,可以通过safe过滤器实现
实现了标签的效果,可以点击
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。
参数:截断的字符数
{{ value|truncatechars:9}} #注意:最后那三个省略号也是9个字符里面的,也就是这个9截断出来的是6个字符+3个省略号,有人会说,怎么展开啊,配合前端的点击事件就行啦
展示5个,多余的以三个点号展示,展示的个数是 设置的个数减一
四 if标签
{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
比较符号和数值之间要有空格
{% if num > 100 or num < 0 %} <p>无效</p> <!--不满足条件,不会生成这个标签--> {% elif num > 80 and num < 100 %} <p>优秀</p> {% else %} <!--也是在if标签结构里面的--> <p>凑活吧</p> {% endif %}
如果判断不成立,标签不会展示
当然也可以只有if和else
{% if user_list|length > 5 %} <!--结合过滤器来使用--> 七座豪华SUV {% else %} 黄包车 {% endif %} {% if age > 18 or number > 100 %} <!-- 符号两边必须有空格 --> <h1>太老了</h1> {% elif age == 18 %} <h1>还行</h1> {% else %} <h1>挺嫩</h1> {% endif %} {% if hobby|length > 3 %} <!-- 可以配合过滤器来使用 --> <h1>爱好还挺多</h1> {% else %} <h1>爱好不够多</h1> {% endif %}
f语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断,注意条件两边都有空格。
五 with
给调用过程比较长的数据起别名的.
给调用过程比较长的数据起别名的.
使用一个简单地名字缓存一个复杂的变量,多用于给一个复杂的变量起别名,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
例如:
注意等号左右不要加空格。
{% with total=business.employees.count %} {{ total }} <!--只能在with语句体内用--> {% endwith %} 或 {% with business.employees.count as total %} {{ total }} {% endwith %}
案例
注意:这个with起的别名,只在with语句里面生效,在外面写不生效