原生 Python 類型¶
預設的 Environment
將範本轉譯為字串。使用 NativeEnvironment
轉譯範本會產生原生的 Python 類型。如果您在製作文字檔的環境外使用 Jinja,這將非常實用。例如,您的程式碼可能有一個中間步驟,讓使用者得以使用範本來定義隨後將傳遞給傳統字串環境的值。
範例¶
相加兩個值會得到一個整數,不是一個數字字串
>>> env = NativeEnvironment()
>>> t = env.from_string('{{ x + y }}')
>>> result = t.render(x=4, y=2)
>>> print(result)
6
>>> print(type(result))
int
轉譯清單語法會產生一個清單
>>> 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
轉譯看來不像是 Python 文字的項目會產生一個字串
>>> t = env.from_string('{{ x }} * {{ y }}')
>>> result = t.render(x=4, y=2)
>>> print(result)
4 * 2
>>> print(type(result))
str
轉譯一個 Python 物件會產生那個物件,只要它是唯一的節點
>>> 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¶
- class jinja2.nativetypes.NativeEnvironment([options])¶
一個會將範本轉譯為原生 Python 類型的環境。
- 引數:
block_start_string (str)
block_end_string (str)
variable_start_string (str)
variable_end_string (str)
comment_start_string (str)
comment_end_string (str)
line_statement_prefix (str | None)
line_comment_prefix (str | None)
trim_blocks (bool)
lstrip_blocks (bool)
newline_sequence (te.Literal['\n', '\r\n', '\r'])
keep_trailing_newline (bool)
optimized (bool)
loader (BaseLoader | None)
cache_size (int)
auto_reload (bool)
bytecode_cache (BytecodeCache | None)
enable_async (bool)
- class jinja2.nativetypes.NativeTemplate([options])¶
- 引數:
block_start_string (str)
block_end_string (str)
variable_start_string (str)
variable_end_string (str)
comment_start_string (str)
comment_end_string (str)
line_statement_prefix (str | None)
line_comment_prefix (str | None)
trim_blocks (bool)
lstrip_blocks (bool)
newline_sequence (te.Literal['\n', '\r\n', '\r'])
keep_trailing_newline (bool)
optimized (bool)
enable_async (bool)
- 傳回類型:
- render(*args, **kwargs)¶
將模板呈現為原始的 Python 類型。如果結果只有一個節點,則回傳其值。否則,會將各個節點串接成字串。如果結果可以透過
ast.literal_eval()
來解析,則會回傳解析後的數值。否則會回傳字串。