zoukankan      html  css  js  c++  java
  • [Dynamic Language] Python Django: 模板引擎(1)基本使用

    Django 模板系统
    模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。
    模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。

    使用 Django 的设置启动交互解释器
        python manage.py shell
        Django搜索DJANGO_SETTINGS_MODULE环境变量,它被设置在settings.py中当你运行命令:python manage.py shell.
    它将自动帮你处理DJANGO_SETTINGS_MODULE。


    模板的使用

    代码
    In [1]: from django import template //导入模板类
    In [2]: t = template.Template('My name is {{name}}.') // 创建模板代码
    In [4]: c = template.Context({'name':'ABeen'}) // 创建模板内容
    In [5]: print t.render(c)
    My name is ABeen.
    In [6]: c = template.Context({'name':'Boy'})
    In [7]: print t.render(c)
    My name is Boy.

    In [8]: from django.template import Context, Template
    In [9]: t = Template('My name is {{ name}}.') // 创建模板代码对象
    In [11]: c = Context({'name':'ABeen'}) // //创建模板内容对象
    In [12]: t.render(c) // 填充模板
    Out[
    12]: u'My name is ABeen.' // Django支持Unicode,这样我们的应用程序就可以轻松处理各式各样的字符集

    // 同一模板,多个上下文

    代码
    In [13]: from django.template import Template, Context
    In [14]: t = Template('Hello, {{name}}')
    In [15]: print t.render(Context({'name':'ABeen'}))
    Hello, ABeen
    In [16]: print t.render(Context({'name':'ABeen2'}))
    Hello, ABeen2
    In [17]: print t.render(Context({'name':'奥本'}))
    Hello, 奥本
    In [18]: for name in ('abeen','shanshan','aoben'):
    ....: print t.render(Context({'name':name}))
    Hello, abeen
    Hello, shanshan
    Hello, aoben


    // 深度变量的查找

    // 字典

    代码
    In [19]: person = {'name':'ABeen', 'Age': 24}
    In [20]: t = Template('{{person.name}} is {{person.Age}} years old.')
    In [21]: c = Context({'person': person})
    In [22]: t.render(c)
    Out[
    22]: u'ABeen is 24 years old.'


    // 对象属性

    代码
    In [23]: import datetime
    In [24]: from django.template import Template, Context
    In [25]: d = datetime.datetime.now()
    In [29]: t = Template('Year is {{date.year}}, Month is {{data.month}}, Day is {{date.day}}')
    In [30]: c = Context({'date':d})
    In [31]: t.render(c)
    Out[
    31]: u'Year is 1982, Month is , Day is 27'

    // 自定义对象

    代码
    In [32]: class Person(object):
    ....: def __init__(self, first_name, last_name):
    ....: self.first_name
    = first_name
    ....: self.last_name
    = last_name
    In [33]: t = Template('Hello, {{ person.first_name }} {{ person.last_name }}.')
    In [34]: c = Context({'person': Person('abeen','shanshan')})
    In [35]: t.render(c)
    Out[
    35]: u'Hello, abeen shanshan.'

    // 引用对象的方法

    In [36]: t = Template('{{ var }} -- {{ var.upper}} -- {{var.isdigit}}')
    In [37]: t.render(Context({'var':'123'}))
    Out[
    37]: u'123 -- 123 -- True'


    注意这里调用方法没有使用圆括号,无法给方法传递参数;只能调用不需要参数的方法。

    当模板系统在变量名中遇到句点时,按以下顺序进行查找:
    1、字典类型查找(比如foo["bar"])
    2、属性查找(比如foo.bar)
    3、方法调用(比如foo.bar())
    4、列表类型索引查找(比如foo[bar])
    系统使用找到的第一个有效类型,这是一种短路逻辑。

    //句点查找可以多级深度嵌套

    比如下面先把{{person.name.upper}}转化成字典类型查找person['name'],然后再是方法调用upper()。

    代码
    In [1]: from django.template import Template, Context
    In [2]: person = {'name': 'ABeen', 'age': 24}
    In [3]: t = Template('{{person.name.upper}} is {{person.age}}')
    In [4]: c = Context({'person': person})
    In [5]: t.render(c)
    Out[
    5]: u'ABEEN is 24'

    //默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败

    In [17]: t = Template('My name is {{name}}.')
    In [18]: t.render(Context())
    Out[
    18]: u'My name is .'
    In [19]: t.render(Context({'var':'hello'}))
    Out[
    19]: u'My name is .'
  • 相关阅读:
    windows下一些启动服务的命令
    使用命令行启动服务
    无法向会话状态服务器发出会话状态请求转
    SQLServer跨服务器连接的多种方法
    Response.Buffer = True
    UpdatePanel和Jquery冲突
    <iframe>标签自适应高度和宽度
    java判断获取到的中文字符串是否乱码
    MMC不能打开文件C:\WINDOWS\SYSTEM32\inetsrv\iis.msc,如何解决?
    在.NET中用excel导出(概要)
  • 原文地址:https://www.cnblogs.com/abeen/p/1759808.html
Copyright © 2011-2022 走看看