在Sinatra中加载样式表

One*_*ude 10 sinatra

我正在使用Sinatra,我一直在尝试加载一些样式表.我link在我的erb中尝试过普通的html 标签,但是没有用.

我试过了

<head>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>
Run Code Online (Sandbox Code Playgroud)

这不是我正在使用的网址的问题,是否有一些特殊的方法来实现这一目标?

mat*_*att 15

使用时href="style.css",您将指定样式表的相对链接.浏览器请求的实际路径将取决于当前页面的URL,例如,如果您有以下路由:

get '/things/:id' do
  #look up thing with id = :id
  erb :my_view
end
Run Code Online (Sandbox Code Playgroud)

然后浏览器将查找样式表/things/style.css.如果你的样式表位于你的public目录的顶层,这显然是行不通的.

快速解决方法是使用样式表的绝对路径:( href="/style.css"注意/字符).这将使浏览器始终在服务器的根目录中查找样式表.

这假定您的应用程序始终安装在服务器的根目录下,如果在子目录中运行它,则会失败.您希望能够说"在此应用程序的根目录中查找样式表,无论它在哪里".在Sinatra中,您可以使用url辅助方法来完成此操作.使用ERB作为模板语言,如下所示:

<link href="<%= url('/style.css') %>" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

这将确保style.css无论您的应用位于何处,链接都将是正确的.