在另一个苗条文件中包含一个苗条文件

我正在开发一个静态网站(所以没有真正的服务器支持),我想在另一个网站中包含一个小的细长片段,可能会将变量传递给它。

这可能吗? 在rails中很容易,虽然render方法,但我不知道如何在slim上做(显然load方法不适用于slim)。

Slim包含Include插件,允许在编译时直接在模板文件中包含其他文件:

 require 'slim/include' include partial_name 

文档可在此处获取: https : //github.com/slim-template/slim/blob/master/doc/include.md

如果需要在运行时包含文件

Slim::Template.new("#{ name }.slim").render完成工作( https://github.com/slim-template/slim#include-helper )。

看起来可以这样做:

 Slim::Template.new('template.slim', optional_option_hash).render(scope) 

在自述文件中找到: https : //github.com/slim-template/slim

如果你想使用Slim建立一个静态网站,我强烈推荐检查Middleman 。 Middleman从Padrino借用了renderpartial常见辅助函数,这是一种类似Rails的Web框架,但使用更轻量级的Sinatra构建(所有这些都是很棒的软件)。

关键是你可以配置Middleman使用slim,然后任意嵌套partials(或布局)。 如果遇到障碍,请检查此堆栈溢出线程 。 这很简单!

Middleman文档解释了如何在这里使用partials,你可以看到一个真实世界的例子在我的要点中如何嵌入HTML5video播放器 。

这个post帮我编写了一个非常杀手的局部帮助器,它为你提供了类似Rails的局部function。 我真的很高兴!

 #partials_helper.rb module PartialsHelper def partial(name, path: '/partials', locals: {}) Slim::Template.new("#{settings.views}#{path}/#{name}.slim").render(self, locals) end end 

 #app.rb require 'slim' require 'slim/include' require 'partials_helper' require 'other_helper_methods' class App < Sinatra::Base helpers do include PartialsHelper include OtherHelperMethods end get '/' do slim :home end end 

-

 #views/home.slim == partial :_hello_world, locals: { name: 'Andrew' } 

-

 #views/partials/_hello_world.slim h1 Hello, World! Hello #{name}! 

我最初只有.render({}, locals) ,这意味着partials无法访问OtherHelperMethods包含的任何帮助方法(但是home.slim确实如此)。 将self传递给.render ,作为第一个参数,修复了(如果你对此感到好奇,请查看Tilt::Template #render文档。

使用此PartialsHelper,传递locals是可选的,因为指定部分的不同路径(相对于settings.views )。

希望你能像我一样尽可能多地使用它!