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>
结果:
发呆

猜你喜欢

转载自www.cnblogs.com/yimiflh/p/9003668.html
今日推荐