12:模板 jinja2

我们只是说Pyramid不喜欢一种模板语言而不是另一种。是时候证明了。Jinja2是一种流行的模板系统,用于Flask中,并模仿Django的模板进行建模。让我们添加 pyramid_jinja2 Pyramid add-on 使jinja2成为 renderer 在我们的Pyramid应用程序中。

目标

  • 显示Pyramid对不同模板系统的支持。

  • 了解如何安装Pyramid加载项。

步骤

  1. 在这一步中,我们从复制 view_class 几步前的步骤目录。

    cd ..; cp -r view_classes jinja2; cd jinja2
    
  2. 添加 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)
    
  3. 安装我们的项目及其新添加的依赖项。

    $VENV/bin/pip install -e .
    
  4. 我们需要包括 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()
    
  5. 我们的 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'}
    
  6. 添加 jinja2/tutorial/home.jinja2 作为模板:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Quick Tutorial: {{ name }}</title>
    </head>
    <body>
    <h1>Hi {{ name }}</h1>
    </body>
    </html>
    
  7. 现在运行测试:

    $VENV/bin/pytest tutorial/tests.py -q
    ....
    4 passed in 0.40 seconds
    
  8. 运行 Pyramid 应用程序时使用:

    $VENV/bin/pserve development.ini --reload
    
  9. 在浏览器中打开http://localhost:6543/。

分析

将Pyramid附加组件放入Pyramid很简单。首先,使用普通的python包安装工具将附加包安装到python虚拟环境中。然后告诉Pyramid的配置程序运行附加组件中的设置代码。在这种情况下,设置代码告诉Pyramid,让一个新的“渲染器”可用,寻找 .jinja2 文件扩展名。

我们的视图代码基本上保持不变。我们只是更改了渲染器上的文件扩展名。对于模板,chameleon和jinja2的基本变量插入的语法非常相似。

额外credit

  1. 我们的项目现在取决于 pyramid_jinja2 . 我们手动安装了这个依赖项。我们还有什么办法可以建立这个协会?

  2. 我们用过 config.include 这是获取 Configurator 载入 pyramid_jinja2 的配置。另一种方法是什么,我们可以将它包含到配置中?