你在哪里存储变量在jinja?

Kev*_*rke 19 python templates jinja2

我有五页具有相同的页面布局和结构,但有一些不同的颜色,文本等,所以这是一个理想的模板环境.我决定使用Jinja2,可能还有烧瓶.我已经阅读了文档和一些在线教程,这些教程解释了很多关于你可以在页面上使用模板做什么,但没有太多关于如何将变量发送到页面的内容.

  • 您在哪里存储特定于页面的变量?
  • 代码如何知道请求了哪个页面以及要加载哪些变量?

nos*_*klo 48

这是基本用法:

首先创建一个模板

>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
Run Code Online (Sandbox Code Playgroud)

然后渲染它传递变量

>>> template.render(name='John Doe')
u'Hello John Doe!'
Run Code Online (Sandbox Code Playgroud)

通常,您需要从文件而不是代码加载模板.这更有效和优化,并允许模板继承:

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Run Code Online (Sandbox Code Playgroud)

这将templatesyourapplicationPython包的文件夹中查找模板,如Python路径中所安装的那样.您也可以使用其他加载器从特定文件系统或其他位置加载.

然后你可以加载一个模板:

template = env.get_template('mytemplate.html')
print template.render(the='variables', go='here')
Run Code Online (Sandbox Code Playgroud)

使用Flask时,它都是为您配置的,因此您只需使用Flask的render_template功能,它就会查找templates应用程序的子文件夹:

from flask import render_template

@app.route('/hello/')
def hello(name=None):
    return render_template('hello.html', name=name)
Run Code Online (Sandbox Code Playgroud)

注意传递给的模板变量(也称为上下文)render_template

Jinja有很好的文档.请阅读.随意提出进一步的问题.