【发布时间】:2013-09-27 01:54:06
【问题描述】:
我正在开发一个静态网站(因此没有真正的服务器支持),我想在另一个网站中加入一个小型的 sn-p,可能会向它传递一个变量。
这可能吗?在 Rails 中很容易,虽然 render 方法,但我不知道如何在 slim 上做到这一点(显然 load 方法不适用于 slim)。
【问题讨论】:
标签: ruby slim-lang static-html
我正在开发一个静态网站(因此没有真正的服务器支持),我想在另一个网站中加入一个小型的 sn-p,可能会向它传递一个变量。
这可能吗?在 Rails 中很容易,虽然 render 方法,但我不知道如何在 slim 上做到这一点(显然 load 方法不适用于 slim)。
【问题讨论】:
标签: ruby slim-lang static-html
这个帖子帮助我编写了一个非常杀手级的 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),这意味着partials 无法访问OtherHelperMethods 中包含的任何辅助方法(但home.slim 可以)。将self 传递给.render,作为第一个参数,可以解决这个问题(如果你对此感到好奇,请查阅Tilt::Template #render 文档。
使用此 PartialsHelper,传递局部变量是可选的,指定不同路径到局部(相对于 settings.views)也是如此。
希望你能像我一样充分利用它!
【讨论】:
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,然后任意嵌套部分(或布局)。如果遇到障碍,请查看this stack overflow thread。不过这很简单!
Middleman 文档解释了如何使用部分 here,您可以在 my gist for embedding an HTML5 video player 中查看真实示例的外观。
【讨论】:
render 和 partial。不过,对于没有角度的网站,这很棒,我现在正在检查。
貌似可以这样实现:
Slim::Template.new('template.slim', optional_option_hash).render(scope)
在 slim readme 中找到:https://github.com/slim-template/slim
【讨论】:
Slim::Template.new('_variables.slim', optional_option_hash).render(scope) 就没什么好说的了,“部分”的东西只在 Rails 中可用,而不是在 Slim 中。如果你使用 Rails,你只需要render 'variables'