12:模板 jinja2
¶
我们只是说Pyramid不喜欢一种模板语言而不是另一种。是时候证明了。Jinja2是一种流行的模板系统,用于Flask中,并模仿Django的模板进行建模。让我们添加 pyramid_jinja2
Pyramid add-on 使jinja2成为 renderer 在我们的Pyramid应用程序中。
目标¶
显示Pyramid对不同模板系统的支持。
了解如何安装Pyramid加载项。
步骤¶
在这一步中,我们从复制
view_class
几步前的步骤目录。cd ..; cp -r view_classes jinja2; cd jinja2
添加
pyramid_jinja2
对我们项目的依赖setup.py
:1from setuptools import setup 2 3# List of dependencies installed via `pip install -e .` 4# by virtue of the Setuptools `install_requires` value below. 5requires = [ 6 'pyramid', 7 'pyramid_chameleon', 8 'pyramid_jinja2', 9 'waitress', 10] 11 12# List of dependencies installed via `pip install -e ".[dev]"` 13# by virtue of the Setuptools `extras_require` value in the Python 14# dictionary below. 15dev_requires = [ 16 'pyramid_debugtoolbar', 17 'pytest', 18 'webtest', 19] 20 21setup( 22 name='tutorial', 23 install_requires=requires, 24 extras_require={ 25 'dev': dev_requires, 26 }, 27 entry_points={ 28 'paste.app_factory': [ 29 'main = tutorial:main' 30 ], 31 }, 32)
安装我们的项目及其新添加的依赖项。
$VENV/bin/pip install -e .
我们需要包括
pyramid_jinja2
在里面jinja2/tutorial/__init__.py
:1from pyramid.config import Configurator 2 3 4def main(global_config, **settings): 5 config = Configurator(settings=settings) 6 config.include('pyramid_jinja2') 7 config.add_route('home', '/') 8 config.add_route('hello', '/howdy') 9 config.scan('.views') 10 return config.make_wsgi_app()
我们的
jinja2/tutorial/views.py
只是改变它renderer
:1from pyramid.view import ( 2 view_config, 3 view_defaults 4 ) 5 6 7@view_defaults(renderer='home.jinja2') 8class TutorialViews: 9 def __init__(self, request): 10 self.request = request 11 12 @view_config(route_name='home') 13 def home(self): 14 return {'name': 'Home View'} 15 16 @view_config(route_name='hello') 17 def hello(self): 18 return {'name': 'Hello View'}
添加
jinja2/tutorial/home.jinja2
作为模板:<!DOCTYPE html> <html lang="en"> <head> <title>Quick Tutorial: {{ name }}</title> </head> <body> <h1>Hi {{ name }}</h1> </body> </html>
现在运行测试:
$VENV/bin/pytest tutorial/tests.py -q .... 4 passed in 0.40 seconds
运行 Pyramid 应用程序时使用:
$VENV/bin/pserve development.ini --reload
在浏览器中打开http://localhost:6543/。
分析¶
将Pyramid附加组件放入Pyramid很简单。首先,使用普通的python包安装工具将附加包安装到python虚拟环境中。然后告诉Pyramid的配置程序运行附加组件中的设置代码。在这种情况下,设置代码告诉Pyramid,让一个新的“渲染器”可用,寻找 .jinja2
文件扩展名。
我们的视图代码基本上保持不变。我们只是更改了渲染器上的文件扩展名。对于模板,chameleon和jinja2的基本变量插入的语法非常相似。
额外credit¶
我们的项目现在取决于
pyramid_jinja2
. 我们手动安装了这个依赖项。我们还有什么办法可以建立这个协会?我们用过
config.include
这是获取 Configurator 载入pyramid_jinja2
的配置。另一种方法是什么,我们可以将它包含到配置中?