5

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

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

4

4 回答 4

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)。

于 2015-04-30T07:09:34.877 回答
2

如果您想使用 Slim 构建静态网站,我强烈建议您查看Middleman 。Middleman 借鉴了 Padrino 之类的常用辅助函数renderpartialPadrino 是一个类似于 Rails 的 Web 框架,但使用更轻量级的 Sinatra 构建(所有这些都是很棒的软件)。

重点是您可以将 Middleman 配置为使用 slim,然后任意嵌套部分(或布局)。如果遇到障碍,请检查此堆栈溢出线程。不过这很简单!

Middleman 文档解释了如何在此处使用 partials ,您可以在我的 gist 中看到一个真实示例如何嵌入 HTML5 视频播放器

于 2014-04-27T17:37:10.117 回答
1

看起来可以通过这种方式完成:

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

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

于 2013-09-23T02:09:30.010 回答
0

这个线程帮助我编​​写了一个非常杀手级的 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)也是如此。

希望你能像我一样充分利用它!

于 2016-07-07T22:56:17.170 回答