布局路径在 Sinatra 中不起作用
Layout paths not working in Sinatra
Web 框架使用 Sinatra,页面使用 HAML,我在 /views/layout.haml
有一个布局文件。我在 /public
中也有 javascript 和 css 文件。在布局脚本中,css 的定义类似于:
%script{:type => "text/javascript", :src => "test.js"}
%link{:rel => "stylesheet", :type => "text/css", :href => "test.css"}
当我在 Sinatra 中定义了一个基本路由时,一切正常:
get '/' do
haml :index
end
但是当路线有多个部分时,例如'/route/1',突然到test.js
和test.css
的路径不再有效。 haml 文件正确加载,但布局中的路径不再有效。
经过一些试验后,如果我将路径更改为 "//public/test.js"
,而不仅仅是 "test.js"
,它会再次加载...但仅针对路线 /route/1
。不幸的是,第一条路线 /
不再加载。
在 Sinatra 中通常如何处理这样的路由?
您只需要确保您的 url 是绝对的。
使用:src => "test.js"
,浏览器会发出一个请求相对于当前的url。因此对于根 /
,请求将指向 /test.js
并且会工作,但是当当前页面是 /route/1
时,请求将转到 /route/test.js
并且会失败。
直接解决方法是将 /
添加到 url,使路径成为绝对路径:
%script{:type => "text/javascript", :src => "/test.js"}
更可靠的解决方案是使用 url
helper:
%script{:type => "text/javascript", :src => url("/test.js")}
这将确保您的应用程序即使安装在网络服务器根以外的其他位置也能正常工作。
Web 框架使用 Sinatra,页面使用 HAML,我在 /views/layout.haml
有一个布局文件。我在 /public
中也有 javascript 和 css 文件。在布局脚本中,css 的定义类似于:
%script{:type => "text/javascript", :src => "test.js"}
%link{:rel => "stylesheet", :type => "text/css", :href => "test.css"}
当我在 Sinatra 中定义了一个基本路由时,一切正常:
get '/' do
haml :index
end
但是当路线有多个部分时,例如'/route/1',突然到test.js
和test.css
的路径不再有效。 haml 文件正确加载,但布局中的路径不再有效。
经过一些试验后,如果我将路径更改为 "//public/test.js"
,而不仅仅是 "test.js"
,它会再次加载...但仅针对路线 /route/1
。不幸的是,第一条路线 /
不再加载。
在 Sinatra 中通常如何处理这样的路由?
您只需要确保您的 url 是绝对的。
使用:src => "test.js"
,浏览器会发出一个请求相对于当前的url。因此对于根 /
,请求将指向 /test.js
并且会工作,但是当当前页面是 /route/1
时,请求将转到 /route/test.js
并且会失败。
直接解决方法是将 /
添加到 url,使路径成为绝对路径:
%script{:type => "text/javascript", :src => "/test.js"}
更可靠的解决方案是使用 url
helper:
%script{:type => "text/javascript", :src => url("/test.js")}
这将确保您的应用程序即使安装在网络服务器根以外的其他位置也能正常工作。