【问题标题】:Sinatra's way to render multiple .erb filesSinatra 渲染多个 .erb 文件的方式
【发布时间】:2013-02-16 13:08:47
【问题描述】:

我有一个 Web 项目,它将呈现基于各种 .erb 文件的 HTML 文件。 我不确定执行此操作的最佳方法,因为每个 .erb 文件都需要获取特定信息,例如 cookie 内容。

目前我使用的是这个概念:

  • 我有一个包含所有 .erb 文件的目录,这些文件使用以下方式呈现:

    ERB.new(模板).result

  • 渲染的 HTML 将返回到主 .erb 模板,该模板将再次由 sinatra 渲染,使用:

    erb :main

  • 结果非常好,但我没有机会从基于会话的 cookie 中包含内容,因为 .erb 无法访问它们

我很确定,sinatra 框架提供了一种更好的方法来做到这一点。一个好的方法是......

require 'sinatra'
enable :sessions

get "/" do
content1 = erb :template1, :locals => { :cookie => session[:cookie] }
content2 = erb :template2, :locals => { :cookie => session[:cookie] }
erb :mainTemplate, :locals => { :content => [content1, content2] }
end

...但是,不幸的是,它并没有那么容易:(

有人有更好的主意吗?

【问题讨论】:

    标签: ruby session sinatra session-cookies erb


    【解决方案1】:

    这是我为我所做的:

    get '/Login' do verbose = params['verbose']
        cTest = MyTests.new("envo")
        result = cTest.login()
    
        if verbose == 'true'
            erb :newResultPage, :locals => {:result => result}
        elsif verbose == 'false'
            erb :resultPage, :locals => {:result => result}
        end
    end
    

    基本上,我使用条件语句来确定要使用哪个页面。这是基于参数的。您还可以使用返回结果,或者您喜欢的任何其他条件。

    【讨论】:

    • hmm,如果你只有几个模板,那很好用,但我计划使用大约 50 个。如果..else 或 case 条件这样的数量,它会有点难以使用模板。
    • 为什么一个网址需要五十个不同的页面?是什么让他们如此不同?您可以在页面中包含动态内容,但仍然可以说是“模板”。对于一个 URL 来说,这似乎是一个可怕的事情。
    • 每个模板都将用作小部件,并且只包含几行标记。我一次也只需要 6 到 8 个这样的模板,但是模板会根据每个请求而改变。
    • 您可以考虑为每个模板使用不同的 url,或者将所有条件语句放入您的 erb。如果您使用第二个选项,您可以拥有一个页面,该页面将根据您发送的参数仅显示您想要的数据。
    • 好的。所以 sinatra 不能在一个 url 请求中呈现多个模板?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多