Django模板系统
Posted yimiflh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django模板系统相关的知识,希望对你有一定的参考价值。
官方文档链接:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for
只需要记两种特殊符号:
{{ }}和 {% %}
变量相关的用{{}},逻辑相关的用{%%}。
{{ 变量名 }}
变量名由字母数字和下划线组成。
点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。
几个例子:
view中代码:
def Test(request): from datetime import datetime now=datetime.now() name=‘yimi‘ age=25 hobbly_list=[‘听歌‘,‘打球‘,‘发呆‘] hobbly_dict={‘yimi‘:‘发呆‘,‘haha‘:‘听歌‘,‘wawa‘: ‘打球‘} file_size=131413141314 blog=‘<a href="http://www.cnblogs.com/liwenzhou/p/7931828.html">点我</a>‘ file=‘daishdfkanf riwyjlasdnakjfhqiuwryqcscnaksdfhlairyqi sfjdskdfhiubvaidkaw‘ class Person(): def __init__(self,name,age): self.name=name self.age=age def __str__(self): return ‘我叫%s,今年%s岁‘%(self.name,self.age) #在内置方法中必须加上self.属性 yimi=Person(‘yimi‘,25) haha=Person(‘haha‘,26) wawa=Person(‘wawa‘,28) person_list=[yimi,haha,wawa] return render(request,‘test.html‘,{ ‘name‘:name, ‘age‘:age, ‘hobbly_list‘:hobbly_list, ‘person_list‘:person_list, ‘file_size‘:file_size, ‘now_time‘:now, ‘blog‘:blog, ‘file‘:file })
模板中支持的写法:
{# 取l中的第一个参数 #} {{ hobbly_list.0 }} {# 取字典中key的值 #} {{ d.name }} {# 取对象的name属性 #} {{ person_list.0.name }} {# .操作只能调用不带参数的方法 #} {{ person_list.0.dream }}
语法: {{ value|filter_name:参数 }}
在templates中的代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>试验</title> </head> <body> {{ name }} <hr> {{ age }} <hr> <ul> {% for hobbly in hobbly_list %} <li>{{ hobbly }}</li> {% endfor %} </ul> <hr> <ul> {% for person in person_list %} <li>{{ person.name }}</li> <li>{{ person.age }}</li> <li>{{ person }}</li> {% endfor %} </ul> <hr> {{names|default:‘没有这个变量‘ }} #如果value(names)值没传的话就显示默认参数:‘没有这个变量‘ <hr> {{name|length }} #‘|‘左右没有空格没有空格没有空格返回value的长度,如 value=‘yimi‘的话,就显示4. <hr> {{file_size|filesizeformat}} #将值格式化为一个 “人类可读的” 文件尺寸 (例如 ‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘, 等等) <hr> {{ name|slice:‘1:3‘ }} {{ age|slice:‘0:1‘ }} #切片 #数字类型不能切片 <hr> {{ now_time|date:‘Y-m-d H-i-s‘ }} #格式化 转换成我们能一眼读懂的格式:年月日 时分秒 <hr> {{ blog|safe }} {{ blog }} #为了保证安全性。Django的模板中会对HTML标签和JS等语法标签进行自动转义,如果不希望被转义,在value后面加上safe <hr> {{ file }} <hr> {{ file|truncatechars:9 }}
#truncatechars后面必须加上字符数量
#如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。 <hr> </body> </html>
显示在页面上的结果
自定义过滤器只是带有一个或两个参数的Python函数:
- 变量(输入)的值 - -不一定是一个字符串
- 参数的值 - 这可以有一个默认值,或完全省略
例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”。
自定义filter代码文件摆放位置:
结果:
for
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
for循环可用的一些参数:
for ... empty
如果循环的课迭代对象没有值,则走empty下面的内容
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if,elif和
else
{% if user_list %} 用户人数:{{ user_list|length }} {% elif black_list %} 黑名单数:{{ black_list|length }} {% else %} 没有用户 {% endif %}
当然也可以只有if和else
{% if user_list|length > 5 %} 七座豪华SUV {% else %} 黄包车 {% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
with
定义一个中间变量,相当于给一个变量起一个别名
<p> {% with hobbly=hobbly_dict.yimi %} {{ hobbly }} {% endwith %} </p>
结果:
发呆
以上是关于Django模板系统的主要内容,如果未能解决你的问题,请参考以下文章