## page was renamed from Pylons/TemplatePlugins
<<TableOfContents>>

= Template Language Plugins =

PyLons 通过使用模板引擎插件可以支持除 Myghty 以外的许多模板语言. 如果你是要将 web应用程序 移植到 PyLons , 或者你就是喜欢另一种模板方案, 这都是很有用的.

使用 setuptools 可以很容易地安装模板语言插件. 目前模板引擎插件列表在站点 [[http://projects.dowski.com/projects/buffet|Buffet]] 上.

一旦你安装了其中之一, 那么在 PyLons 中使用新的模板语言就很容易了. 因为 PyLons 设计之初就没有考虑要绑定特定的模板语言, 你只需要另外再做一小点工作就可以了, 具体工作量取决于你要使用的模板语言.

== 示例: 在 PyLons 中使用 Kid ==

要在 PyLons 中使用 Kid, 首先我们必须为 Kid 模板设置一个新的模板目录.

首先, 在 {{{yourproject }}} 中建一个叫 {{{kidtemplates}}} 的目录并添加一个 controller:
{{{
    ~/yourproject% mkdir yourproject/kidtemplates
    ~/yourproject% paster controller kid
}}}
    
现在在你的 {{{controllers}}} 目录下就有了一个 {{{kid.py}}} 文件. 首先, 我们需要将 Kid 添加到可用的模板引擎列表.

编辑 {{{yourproject/config/middleware.py}}}, 就在 {{{config.init_app....}}} 的后面写上 :
{{{#!python
    kidopts = {'kid.assume_encoding':'utf-8', 'kid.encoding':'utf-8'}
    config.add_template_engine('kid', 'yourproject.kidtemplates', kidopts)
}}}
     
编辑 KidController 类, 让它像这样:
{{{#!python
    class KidController(BaseController):
        def index(self):
            c.title = "Your Page"
            c.message = 'hi'
            return render_response('kid', 'test')
}}}

Make sure to change ``yourproject.kidtemplates`` to reflect what your project is actually called. The
first argument to ``render`` or ``render_response`` can be the template engine to use, while the second non-keyword argument is the template. If you don't specify a template engine, it will drop back to the default (Myghty, unless you change the default).

现在让我们来添加一个 Kid 模板, 创建文件 {{{yourproject/kidtemplates/test.kid}}} , 内容如下:
{{{ 
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#">
        <head>
            <title py:content="c.title">title</title>
        </head>
        <body>
            <p py:content="c.message">message</p>
            <p>You made it to the following url: ${h.url_for()}</p>
        </body>
    </html>
}}}

既然模板插件把路径当模块导入, 你还需要在 {{{yourproject/kidtemplates}}} 里创建一个 {{{__init__.py}}} 文件.

现在加载 {{{/kid}}} 应该会返回你刚创建的那个 Kid 模板.

注意传给模板插件的 PyLons 变量都是一样的. 任何你选择的模板语言中都可用以下变量: c, h, g, session, 和 request. 这也使得不用修改 {{{ controller action}}} 就可以容易地切换回 {{{Myghty}}} 或另一种模板语言.


== 切换默认模板引擎 ==

在 PyLons 中, 我们不仅仅是允许定制, 而是积极地鼓励定制. 将默认模板引擎从 Myghty 修改为其他也是很简单地. 让我们来把 Kid 当做是默认模板引擎吧.

修改 {{{yourproject/config/middleware.py}}}, 在 {{{config.init_app....}}}后面 :
{{{#!python
    myghty = config.template_engines.pop()
    kidopts = {'kid.assume_encoding':'utf-8', 'kid.encoding':'utf-8'}
    config.add_template_engine('kid', 'proj.templates', kidopts)
    config.template_engines.append(myghty)
}}}

这段代码交换了模板引擎地顺序, 让 Myghty 排在 Kid 地后面, 使得 Kid 成为新地默认模板引擎. 现在前面的 {{{index}}} 方法里渲染一个模板就不再需要指定 {{{'kid'}}} 了.

 * 注意:
    更多关于 config 对象的细节, 查看 {{{PyLons Module API}}} 中的 [[http://PyLonshq.com/docs/0.9.1/module-PyLons.config.html|可扩展的 config 文档]]