瓶路线添加css文件

时间:2015-04-12 09:34:49

标签: html css bottle

我有一个看起来像这样的测试函数:

@route('/name/')
@route('/name/<something>')
# argument passed and two routes
def name(something="nothing written"):
    print 'arg:',something
    return template('resp',something=something)

模板resp.tpl:

%rebase('base.tpl',something=something)

<p>you wrote {{something}}</p>

模板base.tpl

...
<link href="bootstrap.min.css" rel="stylesheet" type="text/css">
...
% if defined('base'):
<p>base.tpl overriden</p>
{{!base}}
% else:
<p>base not overriden</p>
% end

和我的静态文件功能:

@route('<filename:re:.*\.css>')
def css(filename):
print "css:",filename
return static_file(filename,root='./static/css',mimetype='text/css')

但是当使用'http://localhost:8080/name/jonas'在firefox中测试时,我得到了这个:

127.0.0.1 - - [12/Apr/2015 11:25:00] "GET /name/jonas HTTP/1.1" 200 1334
   arg: bootstrap.min.css
127.0.0.1 - - [12/Apr/2015 11:25:00] "GET /name/bootstrap.min.css HTTP/1.1"  200 1346
   arg: bootstrap.min.js
127.0.0.1 - - [12/Apr/2015 11:25:00] "GET /name/bootstrap.min.js HTTP/1.1" 200 1345

问题是我的函数在第一次调用后尝试将我的css加载为第二个参数,并且实际上没有加载css。我看了很多文档,但我找不到解决方案。有什么建议?

2 个答案:

答案 0 :(得分:0)

您尝试从/ name /目录提供css文件。但没有什么可以服务的。解决方案:

1.为您提供服务css文件的路线命名

@route('<filename:re:.*\.css>', name='static')

2.使用get_url函数

修复您的模板
%rebase('base.tpl',something=something, get_url=bottle.Bottle().get_url)

3.在你的模板中打电话

<link href="{{ get_url(routename='static', filename='bootstrap.min.css') }}" rel="stylesheet" type="text/css">

答案 1 :(得分:0)

好的,现在可以使用此设置:

base.tpl:

% from bottle import url
...

<link href="{{url('static',filename='bootstrap.min.css')}}" rel="stylesheet" type="text/css">

resp.tpl:

% from bottle import url
%rebase('base.tpl',something=something,url=url('static',filename='bootstrap.min.css'))
<p>you wrote {{something}}</p>

webtest.py

@route('<filename:re:.*\.css>',name='static')
    def css(filename):
    print "css:",filename
    return static_file(filename,root='./static/css',mimetype='text/css')

这里的关键是必须为两个模板功能导入瓶子。如果能以某种方式避免这种情况,我会很高兴。