2011-01-20 55 views
7

我正在使用webpy framefork。我想在一個請求上提供靜態文件。在webpy框架中是否有特殊的方法,或者我只需要讀取並返回該文件?如何在webpy中提供文件?

回答

10

如果您正在運行開發服務器(不阿帕奇):

創建一個目錄(也稱爲文件夾)調用運行web.py服務腳本的位置是靜態的。然後將您想要提供的靜態文件放置在靜態文件夾中。

例如,URL​​會將圖像./static/logo.png發送到客戶端。

參考:http://webpy.org/cookbook/staticfiles


更新。如果你真的需要擔任/一個靜態文件,你可以簡單地使用重定向:

#!/usr/bin/env python 

import web 

urls = (
    '/', 'index' 
) 

class index: 
    def GET(self): 
     # redirect to the static file ... 
     raise web.seeother('/static/index.html') 

app = web.application(urls, globals()) 

if __name__ == "__main__": app.run() 
+0

多數民衆贊成在文件只在/靜態路徑,我需要服務index.html請求與路徑/ – codez 2011-01-20 19:26:23

+0

@codez:更新我的答案。 – miku 2011-01-20 19:34:01

+0

這隻適用於你直接從它所在的文件夾運行web.py應用程序。如果你想運行/path/to/my/web/app.py,那麼你運氣不好。 – Octopus 2013-11-22 05:01:46

6

我這個掙扎在過去的幾個小時......呸!

發現了兩個解決方案,都爲我工作... 1 - 在.htaccess的ModRewrite行之前添加此行:

RewriteCond %{REQUEST_URI} !^/static/.* 

這將確保請求到/靜態/目錄中不重寫去你的code.py腳本。

2 - 在code.py添加靜態處理程序,併爲每個幾個目錄的URL條目:

urls = (
    '/' , 'index' , 
    '/add', 'add' , 
    '/(js|css|images)/(.*)', 'static', 
    '/one' , 'one' 
    ) 

class static: 
    def GET(self, media, file): 
     try: 
      f = open(media+'/'+file, 'r') 
      return f.read() 
     except: 
      return '' # you can send an 404 error here if you want 

注 - 我偷了這起web.py谷歌組,但無法找到當發佈更多!

這些無論是工作對我來說,無論是在對web.py模板和直接調用一個網頁,我投入「靜態」

1

我不建議與服務網絡靜態文件的.py。你最好配置apache或nginx。