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模板系统的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 片段在 Django 模板中不起作用

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

Django模板过滤器 - 一行

Django的模板系统

Django的模板系统

如何在Django视图中使用for循环返回每次迭代[关闭]