我在一个静态网站上工作(所以没有真正的服务器支持),我想在另一个网站上包含一个小片段,可能会传递一个变量给它。
这可能吗?在rails中很容易,虽然render
方法,但我不知道如何在苗条上做到这一点(显然load
方法不适用于苗条)。
我在一个静态网站上工作(所以没有真正的服务器支持),我想在另一个网站上包含一个小片段,可能会传递一个变量给它。
这可能吗?在rails中很容易,虽然render
方法,但我不知道如何在苗条上做到这一点(显然load
方法不适用于苗条)。
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 构建静态网站,我强烈建议您查看Middleman 。Middleman 借鉴了 Padrino 之类的常用辅助函数render
,partial
Padrino 是一个类似于 Rails 的 Web 框架,但使用更轻量级的 Sinatra 构建(所有这些都是很棒的软件)。
重点是您可以将 Middleman 配置为使用 slim,然后任意嵌套部分(或布局)。如果遇到障碍,请检查此堆栈溢出线程。不过这很简单!
Middleman 文档解释了如何在此处使用 partials ,您可以在我的 gist 中看到一个真实示例如何嵌入 HTML5 视频播放器。
看起来可以通过这种方式完成:
Slim::Template.new('template.slim', optional_option_hash).render(scope)
在苗条的自述文件中找到:https ://github.com/slim-template/slim
这个线程帮助我编写了一个非常杀手级的 partials 助手,它为您提供了类似 Rails 的 partials 功能。我真的很满意!
#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)
,这意味着部分无法访问内部包含的任何辅助方法OtherHelperMethods
(但home.slim
确实如此)。传入,self
作为.render
第一个参数,可以解决这个问题(如果你对此感到好奇,请查看Tilt::Template #render
文档。
使用此 PartialsHelper,传递局部变量是可选的,指定不同的路径到局部(相对于settings.views
)也是如此。
希望你能像我一样充分利用它!