无额外框架场景下能否在HAML文件中导入其他HAML文件复用变量
解决方案
完全可以不借助额外框架实现该需求,仅使用你已安装的haml gem即可完成,以下是具体实现方法:
方案1:最简变量导入(仅共享变量场景)
你只需要把演示代码里的import shared-variables.haml替换为一行原生Ruby执行语句即可:
# index.haml 开头部分 - eval(File.read('shared-variables.haml')) !!! %html{ lang: "en" } %head %title #{country}
原理是HAML中-开头的代码会直接作为Ruby代码执行,读取公共变量文件的内容并执行后,所有定义的变量会直接在当前模板上下文生效,你原有的构建命令haml index.haml index.html无需做任何修改。
方案2:通用HAML导入(同时共享变量+HAML结构场景)
如果后续你需要导入的不仅是变量,还包含公共HAML片段(比如公共页头、页脚),可以直接调用Haml内置的渲染API:
# 导入任意HAML文件,变量双向互通 = Haml::Engine.new(File.read('shared-content.haml')).render(binding)
传入binding参数可以共享当前模板的上下文,导入文件和当前模板的变量可以互相调用。
注意事项
- 文件路径可根据你的项目结构调整,比如公共文件存放在
src/common目录下,就对应修改为File.read('src/common/shared-variables.haml') - 只要确保所有导入的文件都是项目内可控的文件,使用eval不会有安全风险,属于Ruby原生支持的语法,无额外依赖。
内容的提问来源于stack exchange,提问作者jacobvoller.com
相关产品推荐
相关产品推荐

