在另一个苗条文件中包含一个苗条文件
我正在开发一个静态网站(所以没有真正的服务器支持),我想在另一个网站中包含一个小的细长片段,可能会将变量传递给它。
这可能吗? 在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借用了render
和partial
常见辅助函数,这是一种类似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
)。
希望你能像我一样尽可能多地使用它!