【问题标题】:HAML layout.haml and Sinatra not working with url parametersHAML layout.haml 和 Sinatra 不使用 url 参数
【发布时间】:2012-07-20 22:44:25
【问题描述】:

我的 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样式等

所以我认为使用子目录是问题所在,并将我的所有 hamls 放在基本视图目录中。然而,似乎任何使用像 get ':user/add' 这样的 url 参数的东西都不会包含 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 看起来像这样:

views/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.

任何帮助将不胜感激。谢谢。

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

【问题讨论】:

    标签: ruby sinatra haml


    【解决方案1】:

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

    layout.haml

    代替:

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

    替换(固定版本):

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

    工作正常!希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      所以我需要让它从与我点击 127.0.0.1/about 时相同的位置获取样式表,这在 html 源代码中看起来像这样:

      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)*
      

      【讨论】:

        【解决方案3】:

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

        使用这些时,我看到 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>
        

        我在这里错过了什么??

        【讨论】:

        • 已修复,是错误命名的 haml 文件。应该是views/user/add.haml,我把它命名为views/user/add_user.haml
        猜你喜欢
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2013-03-13
        • 2011-12-31
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        相关资源
        最近更新 更多