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

时间:2013-09-21 21:18:15

标签: ruby slim-lang static-html

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

这可能吗?虽然使用render方法,但在rails中非常简单,但我不知道如何在slim上执行此操作(显然load方法不适用于slim)。

4 个答案:

答案 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)

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

答案 2 :(得分:1)

如果您想使用Slim构建静态网站,我会强烈重新推荐检出Middleman。 Middleman借用了Padrino的常见辅助函数,如renderpartial,这是一种类似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)。

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