zoukankan      html  css  js  c++  java
  • 使用context来传递数据,一个context是一系列变量

    页面设计工作和python代码分离,所以我们引用模板来实现这个功能。

    一、模板实例

    下面是一个模板的实例:

    [python]
    <html>
    <head><title>Ordering notice</title></head>
    <body>
    <h1>Ordering notice</h1>
    <p>Dear {{ person_name }},</p>
    <p>Thanks for placing an order from {{ company }}. It's scheduled to
    ship on {{ ship_date|date:"F j, Y" }}.</p>
    <p>Here are the items you've ordered:</p>
    <ul>
    {% for item in item_list %}
    <li>{{ item }}</li>
    {% endfor %}
    </ul>
    {% if ordered_warranty %}
    <p>Your warranty information will be included in the packaging.</p>
    {% else %}
    <p>You didn't order a warranty, so you're on your own when
    the products inevitably stop working.</p>
    {% endif %}
    <p>Sincerely,<br />{{ company }}</p>
    </body>
    </html>
    <html>
    <head><title>Ordering notice</title></head>

    <body>

    <h1>Ordering notice</h1>

    <p>Dear {{ person_name }},</p>

    <p>Thanks for placing an order from {{ company }}. It's scheduled to
    ship on {{ ship_date|date:"F j, Y" }}.</p>

    <p>Here are the items you've ordered:</p>

    <ul>
    {% for item in item_list %}
    <li>{{ item }}</li>
    {% endfor %}
    </ul>
    {% if ordered_warranty %}
    <p>Your warranty information will be included in the packaging.</p>
    {% else %}
    <p>You didn't order a warranty, so you're on your own when
    the products inevitably stop working.</p>
    {% endif %}

    <p>Sincerely,<br />{{ company }}</p>

    </body>
    </html>
    分析其中的一些元素:

    (1)用大括号括起来的称作:变量,需要对它进行赋值

    (2)用大括号和百分号括起来的是:模板标签,即通知模板系统完成某些工作的标签。上文中有两个模板标签:for和if分别实现循环和判断。

    (3)第二段有个filter过滤器的使用:

    {{ ship_date|date:"F j, Y" }
    它是将变量ship_date传递给过滤器date,同时指定参数,过滤器按照参数输出。
    二、使用模板

    1、基本流程:

    (1)用原始的模板代码创建一个Template对象

    (2)创建一个Context对象,完成对模板对象中的变量赋值

    (3)调用模板对象的render方法,将(2)步生成的context对象作为参数,填充模板,同时返回基于模板的展现字符串,这时其中的变量已经被替换。

    实例:

    [python]
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> c = template.Context({'name': 'Adrian'})
    >>> print t.render(c)
    My name is Adrian.
    >>> c = template.Context({'name': 'Fred'})
    >>> print t.render(c)
    My name is Fred.
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> c = template.Context({'name': 'Adrian'})
    >>> print t.render(c)
    My name is Adrian.
    >>> c = template.Context({'name': 'Fred'})
    >>> print t.render(c)
    My name is Fred.
    2、创建模板对象

    转到mysite所在的目录,输入

    [python]
    python manage.py shell
    python manage.py shell
    为什么我们运行pythonmanage.pyshell而不是python的。这两个命令都会启动交互解释器,但是manage.pyshell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用哪个设置文件。 Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。
    [python]
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> print t
    <django.template.base.Template object at 0x0220EBD0>
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> print t
    <django.template.base.Template object at 0x0220EBD0>每次创建一个template对象,打印出来的地址都不同。

    3、模板渲染

    即,对模板内的变量、标签赋值。

    使用context来传递数据,一个context是一系列变量和他们的值的集合,然后用template的render方法传递context填充模板。

    [python]
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> c = template.Context('name': 'Jim')
    >>> t.render(c)2881064151
    u'My name is Jim.'
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> c = template.Context('name': 'Jim')
    >>> t.render(c)
    u'My name is Jim.'
    实例:
    [python]
    >>> from django.template import Template, Context
    >>> raw_template = """<p>Dear {{ person_name }},</p>
    ...
    ... <p>Thanks for placing an order from {{ company }}. It's scheduled to
    ... ship on {{ ship_date|date:"F j, Y" }}.</p>
    ...
    ... {% if ordered_warranty %}
    ... <p>Your warranty information will be included in the packaging.</p>
    ... {% else %}
    ... <p>You didn't order a warranty, so you're on your own when
    ... the products inevitably stop working.</p>
    ... {% endif %}
    ...
    ... <p>Sincerely,<br />{{ company }}</p>"""
    >>> t = Template(raw_template)
    >>> import datetime
    >>> c = Context({'person_name': 'John Smith',
    ... 'company': 'Outdoor Equipment',
    ... 'ship_date': datetime.date(2009, 4, 2),
    ... 'ordered_warranty': False})
    >>> t.render(c)
    u"<p>Dear John Smith,</p> <p>Thanks for placing an order from Outdoor
    Equipment. It's scheduled to ship on April 2, 2009.</p> <p>You
    didn't order a warranty, so you're on your own when the products
    inevitably stop working.</p> <p>Sincerely,<br />Outdoor Equipment
    </p>"
    >>> from django.template import Template, Context
    >>> raw_template = """<p>Dear {{ person_name }},</p>
    ...
    ... <p>Thanks for placing an order from {{ company }}. It's scheduled to
    ... ship on {{ ship_date|date:"F j, Y" }}.</p>
    ...
    ... {% if ordered_warranty %}
    ... <p>Your warranty information will be included in the packaging.</p>
    ... {% else %}
    ... <p>You didn't order a warranty, so you're on your own when
    ... the products inevitably stop working.</p>
    ... {% endif %}
    ...
    ... <p>Sincerely,<br />{{ company }}</p>"""
    >>> t = Template(raw_template)
    >>> import datetime
    >>> c = Context({'person_name': 'John Smith',
    ... 'company': 'Outdoor Equipment',
    ... 'ship_date': datetime.date(2009, 4, 2),
    ... 'ordered_warranty': False})
    >>> t.render(c)
    u"<p>Dear John Smith,</p> <p>Thanks for placing an order from Outdoor
    Equipment. It's scheduled to ship on April 2, 2009.</p> <p>You
    didn't order a warranty, so you're on your own when the products
    inevitably stop working.</p> <p>Sincerely,<br />Outdoor Equipment
    </p>"

    输出的结果没有按照 显示换行,这和python解释器有关,它会按照真实内容显示,如果想显示出换行,使用print t.render(c)

    4、一个模板多个渲染
    一旦定义了一个模板,就可以渲染多个context
    [python]
    >>> from django.template import Template, Context
    >>> t = Template('My name is {{ name }}.')
    >>> print t.render(Context{'name': 'Jim'})
    My name is Jim.
    >>> print t.render(Context{'name': 'Pat'})
    My name is Pat.
    >>> from django.template import Template, Context
    >>> t = Template('My name is {{ name }}.')
    >>> print t.render(Context{'name': 'Jim'})
    My name is Jim.
    >>> print t.render(Context{'name': 'Pat'})
    My name is Pat.
    [python]
    >>> from django.template import Template, Context
    >>> t = Template('Hello, {{ name }}')
    >>> for name in ('John', 'Juile', 'pat'):
    ... print t.render(Context({'name': name}))
    ...
    Hello, John
    Hello, Juile
    Hello, pat
    >>> from django.template import Template, Context
    >>> t = Template('Hello, {{ name }}')
    >>> for name in ('John', 'Juile', 'pat'):
    ... print t.render(Context({'name': name}))
    ...
    Hello, John
    Hello, Juile
    Hello, pat

  • 相关阅读:
    Eclipse编辑properties文件中文乱码
    Spark安装
    安装VirtualBox后,VMware不能上网
    Hadoop Eclipse插件编译
    MapReduce 常见问题
    MapReduce 气象数据集
    Maven构建Hadoop开发环境
    Eclipse安装Maven
    吴恩达深度学习笔记 course4 week2 深度卷积网络 实例探究
    吴恩达深度学习笔记 cousrse4 week1作业
  • 原文地址:https://www.cnblogs.com/cbryge/p/6145145.html
Copyright © 2011-2022 走看看