@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