mirror of https://gitee.com/openkylin/jinja2.git
65 lines
1.5 KiB
ReStructuredText
65 lines
1.5 KiB
ReStructuredText
|
.. module:: jinja2.nativetypes
|
||
|
|
||
|
.. _nativetypes:
|
||
|
|
||
|
Native Python Types
|
||
|
===================
|
||
|
|
||
|
The default :class:`~jinja2.Environment` renders templates to strings. With
|
||
|
:class:`NativeEnvironment`, rendering a template produces a native Python type.
|
||
|
This is useful if you are using Jinja outside the context of creating text
|
||
|
files. For example, your code may have an intermediate step where users may use
|
||
|
templates to define values that will then be passed to a traditional string
|
||
|
environment.
|
||
|
|
||
|
Examples
|
||
|
--------
|
||
|
|
||
|
Adding two values results in an integer, not a string with a number:
|
||
|
|
||
|
>>> env = NativeEnvironment()
|
||
|
>>> t = env.from_string('{{ x + y }}')
|
||
|
>>> result = t.render(x=4, y=2)
|
||
|
>>> print(result)
|
||
|
6
|
||
|
>>> print(type(result))
|
||
|
int
|
||
|
|
||
|
Rendering list syntax produces a list:
|
||
|
|
||
|
>>> t = env.from_string('[{% for item in data %}{{ item + 1 }},{% endfor %}]')
|
||
|
>>> result = t.render(data=range(5))
|
||
|
>>> print(result)
|
||
|
[1, 2, 3, 4, 5]
|
||
|
>>> print(type(result))
|
||
|
list
|
||
|
|
||
|
Rendering something that doesn't look like a Python literal produces a string:
|
||
|
|
||
|
>>> t = env.from_string('{{ x }} * {{ y }}')
|
||
|
>>> result = t.render(x=4, y=2)
|
||
|
>>> print(result)
|
||
|
4 * 2
|
||
|
>>> print(type(result))
|
||
|
str
|
||
|
|
||
|
Rendering a Python object produces that object as long as it is the only node:
|
||
|
|
||
|
>>> class Foo:
|
||
|
... def __init__(self, value):
|
||
|
... self.value = value
|
||
|
...
|
||
|
>>> result = env.from_string('{{ x }}').render(x=Foo(15))
|
||
|
>>> print(type(result).__name__)
|
||
|
Foo
|
||
|
>>> print(result.value)
|
||
|
15
|
||
|
|
||
|
API
|
||
|
---
|
||
|
|
||
|
.. autoclass:: NativeEnvironment([options])
|
||
|
|
||
|
.. autoclass:: NativeTemplate([options])
|
||
|
:members: render
|