码迷,mamicode.com
首页 > 其他好文 > 详细

Django基础四之模板系统

时间:2019-05-20 22:51:48      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:__init__   attribute   open   mat   测试   byte   过滤器   不用   event   

一、 语法

关于模板渲染你只需要记两种特殊符号(语法):{{  }}和 {% %},变量相关的用{{}},逻辑相关的用{%%}。

二 、变量(html文件中的)

在Django的模板语言中按此语法使用:{{ 变量名 }}。

当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。 变量的命名包括任何字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。

深度查询据点符(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:

字典查询(Dictionary lookup)
 属性或方法查询(Attribute or method lookup)
 数字索引查询(Numeric index lookup)

 注意事项:

  1. 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
  2. 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为‘‘ (空字符串) 。

  几个例子: view中代码:

技术图片
def index(request):
    import datetime
    s = "hello" #字符串
    l = [111, 222, 333]  # 列表
    dic = {"name": "liang", "age": 18}  # 字典
    date = datetime.date(1992, 5, 20)  # 日期对象

    class Person(object):
        def __init__(self, name):
            self.name = name
        def dream(self):
            return dreamer
    person_yuan = Person("chao")  # 自定义类对象 第一条
    person_egon = Person("yantao") #
    person_alex = Person("jinxin")#

    person_list = [person_yuan, person_egon, person_alex]

    return render(request, "index.html", {"l": l, "dic": dic, "date": date, "person_list": person_list})
    # return render(request,‘index.html‘,locals()) 仅用于测试使用,生产不用
    #locals()获取函数内容所有的变量,然后通过render方法给了index.html文件进行模板渲染,如果你图省事,你可以用它,但是很多多余的变量也被传进去了,效率低
变量 视图函数中
技术图片
<h4>{{s}}</h4>
<h4>列表:{{ l.0 }}</h4>
<h4>列表:{{ l.2 }}</h4>
<h4>字典:{{ dic.name }}</h4>
<h4>日期:{{ date.year }}</h4>

<!--取列表的第1个对象的name属性的值-->
<h4>类对象列表:{{ person_list.0.name }}</h4>
<!--取列表的第1个对象的dream方法的返回值,如果没有返回值,拿到的是none-->
<h4>类对象列表:{{ person_list.0.dream }}</h4>
注意:
    调用对象里面的方法的时候,不需要写括号来执行,并且只能执行不需要传参数的方法,如果你的这个方法需要传参数,那么模板语言不支持,不能帮你渲染
html中

三、过滤器

 

  在Django的模板语言中,模板过滤器可以在变量被显示前修改它,使用管道字符"|"来应用过滤器。Django的模板语言中提供了大约六十个内置过滤器。

  过滤器的语法: {{ value|filter_name:参数 }}

  例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

  注意事项:

  1. 过滤管道可以被* 套接*(“链式”),既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
  2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
  3. 有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。
  4. ‘|‘左右没有空格没有空格没有空格

  

default

    如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。

{{ value|default:"nothing"}}#如果value没有传值或者值为空的话就显示nothing

length

    返回值的长度,作用于字符串和列表。

    {{ value|length }}     返回value的长度,如 value=[‘a‘, ‘b‘, ‘c‘, ‘d‘]的话,就显示4.

filesizeformat

    将值格式化为一个 “人类可读的” 文件尺寸 (例如 ‘13 KB‘‘4.1 MB‘‘102 bytes‘, 等等)。例如:

{{ value|filesizeformat }} #    如果 value 是 123456789,输出将会是 117.7 MB。

slice

    切片,如果 value="hello world",还有其他可切片的数据类型

{{value|slice:"2:-1"}}  #顾头不顾腚

date

    格式化,如果 value=datetime.datetime.now()

{{ value|date:"Y-m-d H:i:s"}}#关于时间日期的可用的参数(除了Y,m,d等等)还有很多

truncatechars

    如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

    参数:截断的字符数

{{ value|truncatechars:9}} #注意:最后那三个省略号也是9个字符里面的,也就是这个9截断出来的是6个字符+3个省略号,有人会说,怎么展开啊,配合前端的点击事件就行啦

truncatewords

    在一定数量的字后截断字符串,是截多少个单词。

    例如:‘hello girl hi baby yue ma’,

{{ value|truncatewords:3}}  #上面例子得到的结果是 ‘hello girl h1...‘

cut

    移除value中所有的与给出的变量相同的字符串

{{ value|cut:  }}#如果value为‘i love you‘,那么将输出‘iloveyou‘.

join

    使用字符串连接列表,{{ list|join:‘, ‘ }},就像Python的str.join(list)

safe  {{value}}-----> value = "<a href=‘#‘>点我</a>"   和   value="<script>alert(‘123‘)</script>",不加safe时,a标签未渲染,是浏览器的一种保护机制,加了safe就可可以渲染了。{{value|safe}}---->这是开发者在开发时加入的。

Django基础四之模板系统

标签:__init__   attribute   open   mat   测试   byte   过滤器   不用   event   

原文地址:https://www.cnblogs.com/liangsha0/p/10896887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!