清水寺小僧 2020-06-17
Django 模板解析非常快捷。 大部分的解析工作都是在后台通过对简短正则表达式一次性调用来完成。 这和基于 XML 的模板引擎形成鲜明对比,那些引擎承担了 XML 解析器的开销,且往往比 Django 模板渲染引擎要慢上几个数量级。
from django.shortcuts import render,HttpResponse from django.template.loader import get_template #记得导入 # Create your views here. import datetime from django.template import Template,Context # def current_time(req): #原始的视图函数 # now=datetime.datetime.now() # html="<html><body>现在时刻:<h1>%s.</h1></body></html>" %now # return HttpResponse(html) # def current_time(req): #django模板修改的视图函数 # now=datetime.datetime.now() # t=Template(‘<html><body>现在时刻是:<h1 style="color:red">{{current_date}}</h1></body></html>‘) #t=get_template(‘current_datetime.html‘) # c=Context({‘current_date‘:now}) # html=t.render(c) # return HttpResponse(html) #另一种写法(推荐) def current_time(req): now=datetime.datetime.now() return render(req, ‘current_datetime.html‘, {‘current_date‘:now}) 推荐方式
深度变量的查找(万能的句点号)
在到目前为止的例子中,我们通过 context 传递的简单参数值主要是字符串,然而,模板系统能够非常简洁地处理更加复杂的数据结构,例如list、dictionary和自定义的对象。
在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)。
#最好是用几个例子来说明一下。 # 首先,句点可用于访问列表索引,例如: >>> from django.template import Template, Context >>> t = Template(‘Item 2 is {{ items.2 }}.‘) >>> c = Context({‘items‘: [‘apples‘, ‘bananas‘, ‘carrots‘]}) >>> t.render(c) ‘Item 2 is carrots.‘ #假设你要向模板传递一个 Python 字典。 要通过字典键访问该字典的值,可使用一个句点: >>> from django.template import Template, Context >>> person = {‘name‘: ‘Sally‘, ‘age‘: ‘43‘} >>> t = Template(‘{{ person.name }} is {{ person.age }} years old.‘) >>> c = Context({‘person‘: person}) >>> t.render(c) ‘Sally is 43 years old.‘ #同样,也可以通过句点来访问对象的属性。 比方说, Python 的 datetime.date 对象有 #year 、 month 和 day 几个属性,你同样可以在模板中使用句点来访问这些属性: >>> from django.template import Template, Context >>> import datetime >>> d = datetime.date(1993, 5, 2) >>> d.year 1993 >>> d.month 5 >>> d.day 2 >>> t = Template(‘The month is {{ date.month }} and the year is {{ date.year }}.‘) >>> c = Context({‘date‘: d}) >>> t.render(c) ‘The month is 5 and the year is 1993.‘ # 这个例子使用了一个自定义的类,演示了通过实例变量加一点(dots)来访问它的属性,这个方法适 # 用于任意的对象。 >>> from django.template import Template, Context >>> class Person(object): ... def __init__(self, first_name, last_name): ... self.first_name, self.last_name = first_name, last_name >>> t = Template(‘Hello, {{ person.first_name }} {{ person.last_name }}.‘) >>> c = Context({‘person‘: Person(‘John‘, ‘Smith‘)}) >>> t.render(c) ‘Hello, John Smith.‘ # 点语法也可以用来引用对象的方法。 例如,每个 Python 字符串都有 upper() 和 isdigit() # 方法,你在模板中可以使用同样的句点语法来调用它们: >>> from django.template import Template, Context >>> t = Template(‘{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}‘) >>> t.render(Context({‘var‘: ‘hello‘})) ‘hello -- HELLO -- False‘ >>> t.render(Context({‘var‘: ‘123‘})) ‘123 -- 123 -- True‘ # 注意这里调用方法时并* 没有* 使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的 # 方法。
变量的过滤器(filter)的使用
语法格式:{{obj|filter:param}}
# 1 add : 给变量加上相应的值 # # 2 addslashes : 给变量中的引号前加上斜线 # # 3 capfirst : 首字母大写 # # 4 cut : 从字符串中移除指定的字符 # # 5 date : 格式化日期字符串 # # 6 default : 如果值是False,就替换成设置的默认值,否则就是用本来的值 # # 7 default_if_none: 如果值是None,就替换成设置的默认值,否则就使用本来的值 #实例: #value1="aBcDe" {{ value1|upper }}<br> #value2=5 {{ value2|add:3 }}<br> #value3=‘he llo wo r ld‘ {{ value3|cut:‘ ‘ }}<br> #import datetime #value4=datetime.datetime.now() {{ value4|date:‘Y-m-d‘ }}<br> #value5=[] {{ value5|default:‘空的‘ }}<br> #value6=‘<a href="#">跳转</a>‘ {{ value6 }} {% autoescape off %} {{ value6 }} {% endautoescape %} {{ value6|safe }}<br> {{ value6|striptags }} #value7=‘1234‘ {{ value7|filesizeformat }}<br> {{ value7|first }}<br> {{ value7|length }}<br> {{ value7|slice:":-1" }}<br> #value8=‘http://www.baidu.com/?a=1&b=3‘ {{ value8|urlencode }}<br> value9=‘hello I am yuan‘
最近有点懒散,可能到了瓶颈期,能让人激动的新发现越来越少了。。。
继续