@Mnemon,帽子下面回答給你解決我的問題。我會鼓勵你,但我不允許這樣做。你說服了我,如果它不是沒有GAE的唯一webapp2方法,那至少是一種可行的方式。
但我也可以貢獻一下,你的解決方案現在可以安裝爲「pip install webapp2_static」,從pipi ---由似乎正在使用他的真實姓名的作者......你可以肯定。其他webapp2文檔,我發現有用的可用here。
我執行Linux桌面開發服務器上的代碼,用粘貼,你也用:
def main():
from paste import httpserver
httpserver.serve(app, host='127.0.0.1', port='8080')
但隨着你擁有它上面的代碼(這似乎是完全等同於webapp2_static.py文件),我沒有發現把我的css文件放在應用程序根目錄下名爲static的文件夾中,就像你說的那樣。
例如,我有/home/user/proj/public_html/app/app.py,其中py文件包含您的代碼加上其他「視圖」爲我的超簡單網站。 (我不知道如何粘貼真正的作品,所以也許現在的public_html只是在那裏作爲參考,以便我不會在將東西上傳到生產服務器時感到困惑。)
因此,如果我把CSS樣式表放到一個名爲/ static的文件夾中,然後,如果我將/ static放入/ app或/ public_html的子目錄中,我發現這兩個位置都不起作用;我必須改爲將它作爲/ proj的子目錄。
我並沒有想到,但我的治療方法是將app.configure.get(...,'static')調用中的默認'static'更改爲'public_html/app/static' 。然後它可以在/ app /裏面的/ static文件夾中運行。
同樣使用帶有'的pipi代碼。/ app/static /代替默認的'static'不起作用;我發現我需要./public_html/app/static來代替(或者它可能只是/ public_html/app/static,甚至是public_html/app/static ...我忘了...其中一個工作)。
我測試瞭如何計算abs_path的工作方式,並在下面的代碼中對其進行了重新編寫,其中我已經刪除了您的方法以支持更多的Djangoesque。要機智,在我的一個應用PY文件我把頂部的下列內容:
STATIC_DIR = os.sep + 'tostatic' + os.path.abspath(os.path.dirname(__file__)) + os.sep + 'static'
然後在到我想補充的CSS頁面,在我的情況,我的主頁,我把一個非常可讀的:
<link href="{{STATIC_DIR}}/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css">
對於產生我的主頁我有「視圖」(ENV是Jinja2的環境對象,它需要一個模板加載器作爲參數):
class Home(webapp2.RequestHandler):
def get(self):
template = env.get_template('index.html')
template_values = {'STATIC_DIR': STATIC_DIR }
self.response.write(template.render(template_values))
最後的URL路由是在:
app = webapp2.WSGIApplication(
[
(r'/', Home),
(r'/tostatic/(.+)', StaticView),
], debug=True)
的靜態文件服務的觀點,現在是:
class StaticView(webapp2.RequestHandler):
def get(self, path):
path = os.sep + path
try:
f = open(path, 'r')
self.response.headers.add_header('Content-Type', mimetypes.guess_type(path)[0])
self.response.out.write(f.read())
f.close()
except Exception, e:
print 'Problem in StaticView:', e
self.response.set_status(404)
要終於接近,也就是我和你的方法的問題是一個,我和其他近菜鳥有網址的離開來自與文件系統的傳統關聯。在你的方法中,「static」既是一個子目錄,也是URL前面斜線之間的一個字符串,它告訴解釋器運行哪個視圖(哪個webapp2.RequestHandler子類)。您從URL的其餘部分獲取/ static,然後再對其進行硬編碼。當需要決定在標籤中放入什麼href時,HTML頁面編碼器必須記住這種重複性。通過{{STATIC_DIR}}模板變量方法,很明顯該做什麼。而且很容易重新定義靜態文件的位置---只有STATIC_DIR聲明必須改變。
我發現self.response.set_status(404)出現在Firebug中,但不是Firefox。很明顯,在webapp2中,您必須提供並提供您自己的HTTP狀態代碼頁。
我沒有使用GAE,我在我自己的服務器上運行webapp2,並使用粘貼服務它。 – Mnemon
哦,沒有得到... sry – aschmid00
是樣式表頭設置正確嗎? – aschmid00