2015-04-12 60 views
0

我有一個測試功能,看起來像這樣:瓶路由添加CSS文件

@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') 

,但在Firefox與「http://localhost:8080/name/jonas」進行測試時,我得到這個:

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

你試圖服務從/名/目錄下的css文件。但沒有什麼可服務的。解決方案:

1.Name路線至極服務css文件

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

2.Render模板與get_url功能

%rebase('base.tpl',something=something, get_url=bottle.Bottle().get_url) 

3.Call它在你的模板

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

我試過了解決方案,但得到這個錯誤信息: RouteBuildError:(「這個名字沒有路線」,「靜」) 此外,我不得不進口瓶放入我的模板:從瓶進口瓶 % <鏈路HREF = {{瓶()。GET_URL(routename = '靜態',文件名= 'bootstrap.min.css')}}」的rel = 「樣式表」 類型= 「文本/ CSS」> othervise它doesen」牛逼認識GET_URL。 –

+0

遺憾的混亂,我的回答應該是你的答案下面 –

+0

嘗試將靜態文件分離像CSS,從項目的根imgaes。而你並不需要導入模板布特爾類。您可以定義任何功能在你的模板中,像這樣'bottle.SimpleTemplate ['defaults'] =你r_function'並在您的模板中調用它 – ayb

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') 

這裏的關鍵問題是,瓶子需要進口兩個模板函數。如果能夠以某種方式避免,我會很好。