Specifying a layout and a template in a standalone (not rails) ruby app, using slim or haml

后端 未结 1 492
南旧
南旧 2021-02-04 10:21

I\'m trying to do something like this in a standalone (not rails) app:

layout.slim:

h1 Hello
.content
  = yield

show.slim:



        
相关标签:
1条回答
  • 2021-02-04 10:47

    The layout.slim file looks like:

    h1 Hello
    .content
      == yield
    

    The contents.slim file looks like:

    = name
    

    This can be shortened, but I separated to individual steps for explanation purposes.

    require 'slim'
    
    # Simple class to represent an environment
    class Env
      attr_accessor :name
    end
    
    # Intialize it
    env = Env.new
    # Set the variable we reference in contents.slim
    env.name = "test this layout"
    
    # Read the layout file in as a string
    layout = File.open("layout.slim", "rb").read
    
    # Read the contents file in as a string
    contents = File.open("contents.slim", "rb").read
    
    # Create new template object with the layout
    l = Slim::Template.new { layout }
    
    # Render the contents passing in the environment: env
    # so that it can resolve: = name
    c = Slim::Template.new { contents }.render(env)
    
    # Render the layout passing it the rendered contents
    # as the block. This is what yield in layout.slim will get
    puts l.render{ c }
    

    This will output:

    <h1>Hello</h1><div class="content">test this layout</div>
    
    0 讨论(0)
提交回复
热议问题