1

给定一个玉模板和一个字典,我如何使用字典来填充玉模板?例如,

>>> data = {
...   'name': "World",
...   'ages': [10, 20, 30]
... }

>>> template = """
... html
...   body
...     h1 "Hello, #{name}!"
...     each age in ages
...        h3 "Age: #{age}"
... """

>>> print interpolate(template, data)
<html>
  <body>
    <h1>Hello, World!</h1>
    <h3>Age: 10</h2>
    <h3>Age: 20</h2>
    <h3>Age: 30</h2>
  </body>
</html>

我一直在看pyjade,但我不知道在哪里定义了类似的函数interpolate。我该怎么写interpolate

4

1 回答 1

1

pyjade不给你直接插入玉和蟒蛇对象的选项;相反,它允许将jade 转换为对另一个模板引擎(例如Jinja2)友好的格式。然后,此模板引擎可以为您进行插值。例如,

data = {
  'name': "World",
  'ages': [10, 20, 30]
}

template = """
div
  h1 "Hello, #{name}!"
  each age in ages
     h3 "Age: #{age}"
"""

def interpolate(template, data):
  import os
  from jinja2 import Environment

  env = Environment(
      loader     = FileSystemLoader(os.getcwd()),
      extensions = ['pyjade.ext.jinja.PyJadeExtension']
  )

  # write template to disk (there's probably a way around this?)
  with open("templates/template.jade", "w") as f:
    f.write(template.strip())

  return (
    env
    .get_template("templates/template.jade")
    .render(data)
  )

print interpolate(template, data)
# <div>
#   <h1>"Hello, World!"</h1>
#   <h3>"Age: 10"</h3>
#   <h3>"Age: 20"</h3>
#   <h3>"Age: 30"</h3>
# </div>
于 2013-11-06T19:02:13.867 回答