Python 使用Django从S3提供静态页面
我计划构建一个Django应用程序来生成和更新服务器静态页面(可能存储在S3上)。当用户访问像mysite.com/static-pages/12345这样的url时,我的S3 bucket中名为12345.html的静态文件应该被提供。例如,该静态文件可能是我的站点为用户生成的博客页面的静态html页面 这与在呈现为Django模板的页面上包含静态资源(如CSS/Javascript文件)不同,因为我已经知道如何使用Django模板和SQL数据库——我不熟悉的是,我的“数据”现在是S3上的文件,而不是数据库中的条目,实际上我不需要使用模板 我如何准确地检索所请求的数据(即静态页面)并将其返回给用户?我希望在合理的范围内尽量减少性能损失,尽管如果用户直接从S3请求静态页面(我不希望他们这样做),这当然是最快的” 还有几个问题: 我在别处读过django flatpages应用程序,它在数据库中存储html页面,但静态html页面似乎最好存储在S3这样的文件系统中,不是吗? 有没有办法让请求进入我的Django应用程序,让S3直接为文件提供服务,同时让它看起来像是来自我的应用程序(即浏览器url仍然显示mysite.com/static-pages/12345,但页面没有通过我的Django服务器)Python 使用Django从S3提供静态页面,python,django,amazon-s3,Python,Django,Amazon S3,我计划构建一个Django应用程序来生成和更新服务器静态页面(可能存储在S3上)。当用户访问像mysite.com/static-pages/12345这样的url时,我的S3 bucket中名为12345.html的静态文件应该被提供。例如,该静态文件可能是我的站点为用户生成的博客页面的静态html页面 这与在呈现为Django模板的页面上包含静态资源(如CSS/Javascript文件)不同,因为我已经知道如何使用Django模板和SQL数据库——我不熟悉的是,我的“数据”现在是S3上的文件
非常感谢!Amazon S3不支持URL重写(它不是web服务器),因此您别无选择,只能将请求代理到可以为您重写URL的web服务器或服务 您可以使用您控制并遵循的web服务器让apache重写URL,但当整个过程都加载静态网站时,这似乎有些浪费 或者,如果您想完全停留在S3中,我有一个解决方案可能会起作用: 您可以选择指定一个HTML文档,在404-错误文档的情况下,该文档将返回到用户浏览器。您可以创建一个小HTML页面,检查当前URL,只需更改window.location,转到“重写”URL,而不使用
。HTML
扩展名:
<html>
<script>
var slash = window.location.lastIndexOf("/");
var dot = window.location.lastIndexOf(".");
if (slash < dot) && (dot != -1) {
window.location = window.location + ".html";
}
</script>
</html>
希望对您有所帮助。您只需在/static pages/12345/文件夹中创建index.html,即可获得服务
var loopcheck = window.location.IndexOf(".html");
if (lookcheck != -1) {
window.location = "real404.html";
return;
}