Включить тонкий файл в другой тонкий файл

Я работаю над статическим веб-сайтом (поэтому никакой реальной поддержки сервера), и я хотел бы включить небольшой тонкий фрагмент в другой, возможно передавая ему переменную.

Это возможно? В рельсах довольно легко, хотя render метод, но я понятия не имею, как это сделать на стройной (очевидно, load метод не работает для худых).

4 ответа

Решение

Похоже, это можно сделать следующим образом:

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

Находится в тонком readme: https://github.com/slim-template/slim

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

Я настоятельно рекомендую проверить Middleman, если вы хотите создать статический сайт с использованием Slim. Посредник заимствует общие вспомогательные функции, такие как render а также partial от Padrino, веб-фреймворк, похожий на Rails, но построенный с использованием более легкого Sinatra (все это отличное программное обеспечение).

Суть в том, что вы можете настроить Middleman так, чтобы он использовал slim, а затем произвольно вкладывал части (или макеты). Если вы столкнулись с ошибками, проверьте поток переполнения стека. Это довольно просто, хотя!

Документы Middleman объясняют, как использовать партиалы, и вы можете увидеть, как пример из реальной жизни выглядит в моей сути для встраивания проигрывателя видео HTML5.

Этот поток помог мне написать действительно убойный помощник по партиалам, который дает вам функциональность, подобную 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, передача локальных данных является необязательной, так как указывает другой путь к частичному (относительно settings.views).

Надеюсь, вы получите от этого столько же пользы, сколько и я!

Другие вопросы по тегам