1

I just started Sinatra and try to render the name with h1 html tag but its not working. Although the string is coming without html tag but it is also not rendering the html tag as desired let me know how do I handle it in Sinatra

My code -

get '/nesh' do
    name = "Swapnesh"
    "Hello <h1> #{name} </h1> Sinha"
end
4

3 回答 3

4

The string you're returning from the get '/nesh' block is exactly what will be returned in the HTTP request, which is why it is not wrapped in <html>...</html> tags. If you want there to be surrounding tags such as <html>, <body>, etc., then you should create a Sinatra view template, and pass your view information (such as name) into the view renderer.

A complete example might look like this:

app.rb:

set :views, settings.root + '/templates'

get '/nesh' do
  name = "Swapnesh"
  erb :hello, :locals => {:name => name}
end

templates/layout.erb:

<html>
<body>
  <%= yield %>
</body>
</html>

templates/hello.rb:

<h1>Hello <%= name %> Sinha</h1>

Notice I also used a Sinatra layout, which is a base template for all rendered actions (unless opted-out).

Finally, you could implement it all in one file using named templates:

template :layout do
  <<-EOF
<html>
<body>
  <%= yield %>
</body>
</html>
EOF
end

template :hello do
  "<h1>Hello <%= name %> Sinha</h1>"
end

get '/nesh' do
  name = "Swapnesh"
  erb :hello, :locals => {:name => name}
end
于 2013-03-03T17:55:53.327 回答
2

If you want to use HTML and Sinatra, you should use erb, or something similar to display the HTML.

Example your code:

get '/nesh' do
    name = "Swapnesh"
    erb :resultPage, :locals => {:name => name}
end

Example resultPage.erb:

<p> Hello <h1> <%=#{name}%> </h1> Sinha</p>
于 2013-03-03T16:53:36.610 回答
1

I am not sure if this is the correct way or not but i tried this way and it works..

require 'sinatra'

get '/nesh' do
    @name = "Swapnesh"
    erb :test
end

__END__
@@test
<!doctype html>
<html lang="en">
<head>
<title>Test Sinatra pass</title>
<meta charset="utf-8">
</head>
<body>
<p> Hello <h1> <%= @name %> </h1> Sinha</p>
</body>
</html>
于 2013-03-03T17:59:04.413 回答