Sinatra模板内的IF语句 [英] If Statement inside Sinatra template

查看:14
本文介绍了Sinatra模板内的IF语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望仅在特定路由/页面上显示消息。实质上,如果在/ROUTE上显示一条消息。

我试着浏览了Sinatra文档,但找不到具体的方法。是否有Ruby方法可以使此工作?

编辑:这是我想做的一个示例。

get '/' do
    erb :index
end

get '/page1' do
    erb :page1
end

get '/page2' do
    erb :page2
end

*******************

<!-- Layout File -->
<html>
<head>
    <title></title>
</head> 
<body>
    <% if this page is 'page1' do something %>
    <% else do something else %>
    <% end %>

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

不知道如何使用Ruby/Sinatra将当前页作为目标,并将其结构化为IF语句。

erb

有几种方法可以解决这个问题(顺便说一句,我将使用Haml,尽管您已经使用了推荐答案,因为它对我来说打字更少,而且显然是一种改进)。大部分依赖于request helper,最常见的会是request.path_info

视图内的条件。

在任何视图中,而不仅仅是布局中:

%p
  - if request.path_info == "/page1"
    = "You are on page1"
  - else
    = "You are not on page1, but on #{request.path_info[1..]}"
%p= request.path_info == "/page1" ? "PAGE1!!!" : "NOT PAGE1!!!"

带有路由的条件。

get "/page1" do
  # you are on page1
  message = "This is page 1"
  # you can use an instance variable if you want, 
  # but reducing scope is a best practice and very easy.
  erb :page1, :locals => { message: message }
end

get "/page2" do
  message = nil # not needed, but this is a silly example
  erb :page2, :locals => { message: message }
end

get %r{/page(d+)} do |digits|
  # you'd never reach this with a 1 as the digit, but again, this is an example
  message = "Page 1" if digits == "1"
  erb :page_any, :locals => { message: message }
end

# page1.erb
%p= message unless message.nil?

Abefore挡路。

before do
  @message = "Page1" if request.path_info == "/page1"
end

# page1.erb
%p= @message unless @message.nil?

甚至更好

before "/page1" do
  @message = "Hello, this is page 1"
end

或更好

before do
  @message = request.path_info == "/page1" ? "PAGE 1!" : "NOT PAGE 1!!"
end

# page1.erb
%p= @message

如果您希望执行此操作,我还建议您查看Sinatra Partial,因为当您为该工作准备了帮助者时,处理拆分视图要容易得多。

这篇关于Sinatra模板内的IF语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆