我正在使用haml模板构建Sinatra应用程序,并且想知道是否可以实现某种类型的全站点参数。在我的例子中,这个想法是允许为每条路线选择不同的layout.haml
,而不必复制/重写应用中的每条路线。
例如,我想知道是否有可能获得http://domain.com/route/:normal-params/?layout=layout_b
,并且能够将?template=template_choice
附加到应用中的任何路线并使用适当的布局。
我能想到的唯一解决方案,即效率非常低,是复制每一条路线以查找此参数。我也觉得可以通过Filter以某种方式实现它,但我不确定如何实现这样的事情。
答案 0 :(得分:2)
您可以在调用haml
时指定要加载的布局:
haml :post, :layout => params[:layout].to_sym
通过这种方式,您可以调用http://domain.com/route/foo/bar?layout=layout_b
,Sinatra将查找名为layout_b
的适当布局以进行渲染。
如果没有作为网址参数提供,您可能希望指定要呈现的默认布局:
haml :post, :layout => (params[:layout] || "default").to_sym