哪个网站在线做头像好,软件编程培训学校排名,网站代理登录网址,天津百度seo排名优化软件Pyramid 是一个流行的 Python Web 框架#xff0c;而 Mako 和 PyJade 是用于模板引擎的工具#xff0c;它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的#xff0c;尤其会遇到各种各样的问题#xff0c;下面我将利用我所学的知识一一为大家解…Pyramid 是一个流行的 Python Web 框架而 Mako 和 PyJade 是用于模板引擎的工具它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的尤其会遇到各种各样的问题下面我将利用我所学的知识一一为大家解答。 1、问题背景
在 Pyramid 框架中您可能会遇到以下问题
现有项目中存在使用 Mako 编写的模板 base.mako您想要将其用作视图 base_view 的渲染器。同时您还需创建一个新的模板 concrete.jade它继承自 base.mako。您希望能够根据文件扩展名使用不同的渲染器来呈现模板。在使用 PyJade 渲染 concrete.jade 后您希望能够进一步使用 Mako 编译器将渲染结果编译为最终的 HTML。
2、解决方案
要解决以上问题您可以按照以下步骤操作
安装 pyramid_mako 和 pyjade 包
pip install pyramid_mako pyjade在 Pyramid 项目中创建一个新的渲染器工厂例如 my_renderer_factory.py
from pyramid.interfaces import IRendererFactory
from pyjade import Templateclass MyRendererFactory(IRendererFactory):def __init__(self, info):passdef __call__(self, implementation, info):if implementation mako:return MakoRenderer()elif implementation jade:return PyJadeRenderer()在 my_renderer_factory.py 文件中定义 MakoRenderer 和 PyJadeRenderer 类分别用于渲染 Mako 和 PyJade 模板
from pyramid.renderers import MakoRenderer, get_rendererclass MakoRenderer(MakoRenderer):def __init__(self, **settings):super().__init__(**settings)def render(self, value, system):# 根据模板路径获取 Mako 模板template get_renderer(system, self.mako_template).implementation()# 渲染 Mako 模板并返回结果return template.render(value)class PyJadeRenderer:def __init__(self, **settings):passdef render(self, value, system):# 根据模板路径获取 PyJade 模板template get_renderer(system, self.jade_template).implementation()# 渲染 PyJade 模板并返回结果return template.render(value)在 Pyramid 配置文件中注册 MyRendererFactory
configuratorrenderer_factory pyramidpyramid.renderers.RendererFactory /renderer_factory namemy_renderer_factory /
/configurator在视图配置中指定要使用的渲染器
config.add_route(base, /base)
config.add_view(viewmy_views.BaseView,route_namebase,renderermy_renderer_factory:mako/base.mako
)对于继承自 base.mako 的模板 concrete.jade您可以使用以下配置
config.add_route(concrete, /concrete)
config.add_view(viewmy_views.ConcreteView,route_nameconcrete,renderermy_renderer_factory:jade/concrete.jade
)这样您就可以在 Pyramid 项目中使用 Mako 和 PyJade 来渲染模板并且可以根据文件扩展名自动选择渲染器。
代码示例
以下是一个使用 Mako 和 PyJade 的简单示例
from pyramid.config import Configurator
from pyramid_mako import mako_templatemako_template(base.mako)
def base_view(request):return {}mako_template(concrete.jade)
def concrete_view(request):return {}从上面的案例中我们清晰的知道base.mako 是一个 Mako 模板concrete.jade 是一个 PyJade 模板。这两个模板都被编译为 Mako 模板最终生成 HTML。至于选择哪种模式还要结合自身项目实际情况而定夺。如果有任何问题可以留言讨论。