Tornado路由规则疑问

Lujinke 发布于 2015/09/30 08:37
阅读 718
收藏 0

用Tornado搭建基于Python的web应用时,遇到这样一个问题:

比如,我的路由里面有如下的规则:

r"/test/M([0-9]+)",TestHandler

所以我在访问如http://xxx.xx.xx.xx/test/M1234这样的页面时,Tornado或让TestHandler去处理这个请求

在TestHandler里面的get方法render一个html文件test.html

test.html有一些引入css和js的代码:

比如:

<link rel="stylesheet" href="{{ css_file }}">

这里的css_file是TestHandler里面传进去的一个变量,代表渲染test.html时我需要引用的css文件


问题是:

由于我访问的页面URL是http://xxx.xx.xx.xx/test/M1234

因此Tornado在渲染test.html时,总是会以http://xxx.xx.xx.xx/test做前缀来引用test.html中的css或者是js路径,所以在打开这个页面时提示找不到:

http://xxx.xx.xx.xx/test/static/css/xx.css


static是一个包含所有静态js和css文件的目录,结构如下:

static

        |

        css-----xx.css

        |        

        js-----xx.js


所以正确的路径应该是http://xxx.xx.xx.xx/static/css/xx.css

而不是http://xxx.xx.xx.xx/test/static/css/xx.css


难道我的路由规则里面不能有多于1级的的url地址吗

如r"/test/a/M([0-9]+)"

r"/test/M([0-9]+)"    

因为Tornado在解析这些页面的css和js链接时,总是会引用成

 http://xxx.xx.xx.xx/test/a/static/css/xx.css

http://xxx.xx.xx.xx/test/static/css/xx.css

实际上这个地址是不对的,有人知道怎么绕过这个问题吗?

加载中
0
mallon
mallon
这不是Tornado的问题,而是浏览器把相对路径解析成绝对路径的规则
0
L
Lujinke
那怎样可以设置浏览器选项,让他只是从根(/)开始解析html里面的css和js链接呢
0
DayByDay
DayByDay
class Application(tornado.web.Application):
    def __init__(self):
        settings = {
                'static_path':os.path.join(os.path.dirname(__file__),'static'),
                'static_url_prefix':
         } 

可以试试 修改下这两个static配置,一个是指定静态文件目录位置,另一个指定URL链接中匹配成静态文件的URL前缀

返回顶部
顶部