HAML layout.haml和Sinatra不使用url参数

时间:2012-07-22 11:40:39

标签: ruby sinatra haml

我的index.haml正常运行,例如:

get '/about' do
  haml :about
end

但是如果我尝试使用如下的用户参数:

get ':user/add' do
  haml :add_item
end

将忽略layout.haml。

我试图使用我的视图文件夹中的子目录来实现此功能,如:

/view/contact/add.haml

虽然它插入= yield内容,但它不会显示layout.haml css样式等。

所以我认为使用子目录是问题,并将我的所有哈希放在基本视图目录中。但是,似乎任何使用url参数(如get':user / add')都不会包含layout.haml。目前这是我做过的测试:

myapp.rb

require "rubygems"
require "sinatra"
require "haml"
require "data_mapper"
require "pony"

get '/' do #works fine
  haml :index
end

get '/:user_id/dashboard' do #recognizes the content but ignores layout.haml                                                                        
  haml :dashboard                                                                                        
end

我的 layout.haml 如下所示:

视图/ layout.haml

!!!
%html
  %head
    %title Testing haml and sinatra
    %link(rel="stylesheet" href="css/style.css")  
  %body
    #wrapper
      #header
        %h1 HAML Test Template
        %h2 Made with Sinatra and HAML!

      #navigation
        %h1 Navigation

      #sidebar
        %h1 Sidebar

      #content
        =yield

      #footer
        %p
          This is the footer.

非常感谢任何帮助。感谢。

我不知道这是否重要,但我正在使用霰弹枪进行开发

3 个答案:

答案 0 :(得分:5)

我通过在layout.haml中使用以下内容来解决这个问题:

<强> layout.haml

而不是:

%link(rel="stylesheet" href="css/style.css")

替换(固定版本):

%link(rel="stylesheet" href="/css/style.css")

工作正常!希望这有助于某人。

答案 1 :(得分:0)

如果有帮助,当我查看源代码时,它似乎正在尝试根据url参数“:user_id”在错误的位置访问我的style.css,如下所示:

http://127.0.0.1:4567/test/myapp/css/style.css

因此,如果我在html源代码中看到这样的127.0.0.1/about,那么我需要获取它以获取相同位置的样式表:

http://127.0.0.1:4567/css/style.css

在实际代码中,两个样式表链接都是相同的,但由于我在子目录中,因此无法找到样式表 style.css

http://127.0.0.1:4567/css/style.css *(exists in public/css/style.css)*

-vs -

http://127.0.0.1:4567/test/myapp/css/style.css *(doesn't exist)*

答案 2 :(得分:0)

我现在仍然看到一个问题,现在使用url参数在sinl路径中使用sinatra和Haml的变量。

使用这些时,我看到css嵌入到后处理的html中,而不是创建一个指向style.css文件的链接。处理过的html如下(即使doctype搞砸了,也不包括title):

我现在看到路径中的url参数(例如localhost:4567 / user / add):

<!DOCTYPE html>
<html>
<head>
  <style type="text/css">
  body { text-align:center;font-family:helvetica,arial;font-size:22px;
    color:#888;margin:20px}
  #c {margin:0 auto;width:500px;text-align:left}
  </style>
</head>

而不是这个(例如localhost:4567 / about):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html>
  <head>
    <title>Test app</title>
    <link href='/css/style.css' rel='stylesheet' />
  </head>

我在这里缺少什么?