我有一个看起来像这样的测试函数:
@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。我看了很多文档,但我找不到解决方案。有什么建议?
答案 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')
这里的关键是必须为两个模板功能导入瓶子。如果能以某种方式避免这种情况,我会很高兴。