我了解Pug不支持模板中的动态包含或扩展。即
extend path/to/template
有效但无效
extend #{dynamic_path_to_template}
是否有一种变通办法(无论如何费解),可以实现在运行时修改 View 使用的模板的相同目标
上下文:我的用例是我正在开发一个npm模块,用于扩展其他 View 的模板位于该模块内部。在模块发布并安装后,将定义路径(即node_modules / my_module / path / to / template),但是在开发阶段,我只需要能够“npm链接”到模块并拥有模板工作。我也不想对链接进行硬编码,以便可以发布与测试相同的代码。
最佳答案
目前尚无法做到这一点,但是您可以在没有动态扩展的情况下制定应用程序体系结构。
可能的解决方案#1
layout.jade:
if conditionalVariable
include firstLayout.jade
else
include otherLayout
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/