• 使用Pyramid、Mako和PyJade生成 HTML


    Pyramid 是一个流行的 Python Web 框架,而 Mako 和 PyJade 是用于模板引擎的工具,它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的,尤其会遇到各种各样的问题,下面我将利用我所学的知识一一为大家解答。

    在这里插入图片描述

    1、问题背景

    在 Pyramid 框架中,您可能会遇到以下问题:

    • 现有项目中存在使用 Mako 编写的模板 base.mako,您想要将其用作视图 base_view 的渲染器。
    • 同时,您还需创建一个新的模板 concrete.jade,它继承自 base.mako。
    • 您希望能够根据文件扩展名,使用不同的渲染器来呈现模板。
    • 在使用 PyJade 渲染 concrete.jade 后,您希望能够进一步使用 Mako 编译器将渲染结果编译为最终的 HTML。

    2、解决方案

    要解决以上问题,您可以按照以下步骤操作:

    1. 安装 pyramid_makopyjade 包:
    pip install pyramid_mako pyjade
    
    1. 在 Pyramid 项目中,创建一个新的渲染器工厂,例如 my_renderer_factory.py
    from pyramid.interfaces import IRendererFactory
    from pyjade import Template
    
    class MyRendererFactory(IRendererFactory):
        def __init__(self, info):
            pass
    
        def __call__(self, implementation, info):
            if implementation == 'mako':
                return MakoRenderer()
            elif implementation == 'jade':
                return PyJadeRenderer()
    
    1. my_renderer_factory.py 文件中,定义 MakoRendererPyJadeRenderer 类,分别用于渲染 Mako 和 PyJade 模板:
    from pyramid.renderers import MakoRenderer, get_renderer
    
    class 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):
            pass
    
        def render(self, value, system):
            # 根据模板路径获取 PyJade 模板
            template = get_renderer(system, self.jade_template).implementation()
            # 渲染 PyJade 模板并返回结果
            return template.render(value)
    
    1. 在 Pyramid 配置文件中,注册 MyRendererFactory
    <configurator>
      <renderer_factory pyramid="pyramid.renderers.RendererFactory" />
      <renderer_factory name="my_renderer_factory" />
    configurator>
    
    1. 在视图配置中,指定要使用的渲染器:
    config.add_route('base', '/base')
    config.add_view(
        view='my_views.BaseView',
        route_name='base',
        renderer='my_renderer_factory:mako/base.mako'
    )
    

    对于继承自 base.mako 的模板 concrete.jade,您可以使用以下配置:

    config.add_route('concrete', '/concrete')
    config.add_view(
        view='my_views.ConcreteView',
        route_name='concrete',
        renderer='my_renderer_factory:jade/concrete.jade'
    )
    

    这样,您就可以在 Pyramid 项目中使用 Mako 和 PyJade 来渲染模板,并且可以根据文件扩展名自动选择渲染器。

    代码示例

    以下是一个使用 Mako 和 PyJade 的简单示例:

    from pyramid.config import Configurator
    from pyramid_mako import mako_template
    
    @mako_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。至于选择哪种模式还要结合自身项目实际情况而定夺。如果有任何问题可以留言讨论。

  • 相关阅读:
    ps打开找不到MSVCP140.dll重新安装方法,安装ps出现msvcp140.dll缺失解决方法
    2021.06青少年软件编程(Python)等级考试试卷(二级)
    Visual Studio主题颜色及字体
    输入为一组4字节的数据,输出为一组5字节的数据加密算法匹配美国通用加密算法
    (SUB)app性能测试
    【Composite模式】C++设计模式——组合模式
    Day8、9、10、11 计算机网络——数据链路层
    软件测试基本流程有哪些?权威的第三方软件检测机构推荐
    火热报名中|墨菲安全发起首届 OSCS 软件供应链安全技术论坛
    (2022版)一套教程搞定k8s安装到实战 | Ingress
  • 原文地址:https://blog.csdn.net/weixin_44617651/article/details/138786751