我了解Pug不支持模板中的动态包含或扩展。即

extend path/to/template

有效但无效
extend #{dynamic_path_to_template}

是否有一种变通办法(无论如何费解),可以实现在运行时修改 View 使用的模板的相同目标

上下文:我的用例是我正在开发一个npm模块,用于扩展其他 View 的模板位于该模块内部。在模块发布并安装后,将定义路径(即node_modules / my_module / path / to / template),但是在开发阶段,我只需要能够“npm链接”到模块并拥有模板工作。我也不想对链接进行硬编码,以便可以发布与测试相同的代码。

最佳答案

目前尚无法做到这一点,但是您可以在没有动态扩展的情况下制定应用程序体系结构。

可能的解决方案#1

  • 创建一个有条件地包含多个布局的layout.jade:
    layout.jade:
    
    if conditionalVariable
        include firstLayout.jade
    else
        include otherLayout
    
  • 在您的 View 中,扩展layout.jade,并在 Controller 中定义conditionalVariable(true / false):
    view.jade:
    
    extends layout
    
    block content
        p here goes my content!
    

  • 可能的解决方案2
  • 将配置传递到布局
    - var lang = req.getLocale();
    doctype html
       block modifyLayout
    
  • 将项目分成多个入口,每个入口扩展布局并传递其不同的配置,并在不同的块中包含不同的内容
    extends ../layout
    block modifyLayout
       - var lang = "en" //force language to be en in this page.
    block body
       include my-page-body
    

  • 可能的解决方案#3

    使用像terraform这样的东西,它使用pug作为其渲染引擎,但是它使您能够使用像这样的动态部分
    != partial(dynamicFileFromVariable)
    

    关于javascript - Pug/Jade中动态包含的解决方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45824697/

    10-09 20:09