我正在开发一个静态网站(所以没有真正的服务器支持),我想在另一个网站中加入一个小的细长片段,可能会将变量传递给它。
这可能吗?虽然使用render
方法,但在rails中非常简单,但我不知道如何在slim上执行此操作(显然load
方法不适用于slim)。
答案 0 :(得分:7)
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)。
答案 1 :(得分:1)
看起来可以这样做:
Slim::Template.new('template.slim', optional_option_hash).render(scope)
答案 2 :(得分:1)
如果您想使用Slim构建静态网站,我会强烈重新推荐检出Middleman。 Middleman借用了Padrino的常见辅助函数,如render
和partial
,这是一种类似Rails的Web框架,但使用更轻量级的Sinatra构建(所有这些都是很棒的软件)。
Poins是你可以配置Middleman使用slim,然后任意嵌套partials(或布局)。如果遇到障碍,请检查this stack overflow thread。这很简单!
Middleman文档解释了如何使用partial here,您可以在my gist for embedding an HTML5 video player中看到真实示例的外观。
答案 3 :(得分:0)
这个帖子帮助我编写了一个非常杀手的局部帮助器,它为你提供了类似Rails的局部功能。我真的很高兴!
#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,传递locals是可选的,因为指定部分的不同路径(相对于settings.views
)。
希望你像我一样尽可能多地使用它!