8

バックグラウンド

Rails以外でいくつかの HAML テンプレートのフォーマットをテストしようとしています。アイデアは、コマンド ラインまたは含まれている Ruby ファイルを介していくつかのインスタンス変数を渡し、テンプレートを標準出力にレンダリングすることです。以下に概説するように、成功せずにこれをいくつかの異なる方法で試しました。

Ruby ファイルの要求

たとえば、次の 2 つのファイルがあるとします。

  • HAML テンプレート: 「test.haml」

    !!!
    %h1 Testing HAML CLI
    %p= @bar
    %p= @baz
    
  • Rubyファイル:「test.rb」

    @foo = 'abc'
    @bar = '123'
    

補間された HTML ファイルを標準出力に返すような呼び出しを期待しますhaml -r ./test test.hamlが、そうではありません。代わりに、HTML だけを取得します。

<!DOCTYPE html>
<h1>Testing HAML CLI</h1>
<p></p>
<p></p>

プログラムによる試み

これはうまくいかなかったので、プログラムでこれをやろうとしました。例えば:

#!/usr/bin/env ruby
require 'haml'

@foo = 'abc'
@bar = '123'

engine = Haml::Engine.new(File.read 'test.haml')
puts engine.render

まったく同じ結果が得られます。たとえば、変数補間のない HTML だけです。

質問を言い換える

明らかに、HAML が関連付けられた変数を使用してテンプレートをレンダリングするには、他に何かが必要です。引数を渡すか、ファイルを含めることにより、コマンドラインからこれを行うことをお勧めします。コマンドラインから HAML を呼び出すにはどうすればよいですか?

何らかの理由でそれが不可能な場合、プログラムで HAML を呼び出して、Rails に依存せずに補間を実行するにはどうすればよいですか?

4

2 に答える 2

13

スコープ オブジェクトとローカル変数ハッシュをrenderメソッドに指定できます。あなたの例では、次のように呼び出します。

engine = Haml::Engine.new(File.read 'test.haml')
engine.render(Object.new, { :@foo => 'abc', :@bar => '123' })
于 2013-04-15T22:25:14.580 に答える