【问题标题】:Are there any good options for baking out a Django site as static files?将 Django 站点烘焙为静态文件有什么好的选择吗?
【发布时间】:2011-11-08 19:51:32
【问题描述】:

假设您有一个现有的数据库支持的 Django 站点。一些简单的东西,比如包含每个小联盟棒球队记录的单一模型。该模型由一个列出所有团队的视图访问,另一个视图接受一个 slug 然后创建一个关于该团队的详细信息页面。

有没有一个很好的选择可以将应用程序转换成一堆烘焙出来的平面文件,以便可以从像 Amazon 的 S3 这样的静态文件服务中提供服务?

我玩过Hyde,但我不清楚它如何应用于由数据库支持的现有网站。

非常感谢任何建议。提前谢谢你。

【问题讨论】:

    标签: python database django amazon-s3


    【解决方案1】:

    django-medusa 基本上没有维护。这些是项目 README 中提到的一些替代方案:

    【讨论】:

      【解决方案2】:

      我理解您的意图,但如今任何体面的框架都提供某种caching mecanism 来减轻动态内容的痛苦。使用正确实现的缓存,静态和动态之间的区别将是微不足道的。相信我。

      编码愉快,朋友。

      【讨论】:

      • 谢谢。我完全同意,在部署数据库驱动的应用程序时,缓存是启蒙的唯一途径。在我当前的使用情况下,我实际上更多地考虑成本而不是负载。提供平面文件更便宜,我想尝试利用它。
      【解决方案3】:

      刚刚宣布了一个新的,尽管它已经存在并被作者使用了很长一段时间:

      django-medusa.

      我还没有尝试过使用它,但它看起来确实不错:我会的!

      【讨论】:

        【解决方案4】:

        我在 GAE 上使用 Django 进行了类似的设置。我创建了一个构建脚本,用于构建我的静态 HTML 文件。由于 GAE 的 Django 模板版本略有不同,这可能需要一些测试。

        但本质上你会做类似的事情

        from django.template import Template, Context
        from django.template.loader import get_template
        
        t = get_template('template1.html')   #Need to verify this. GAE template allows me to just call template.render(path, context). Not sure about pure Django templates
        c = Context({ 'variable' : 'value'})
        with open("file1.html", "w") as f:
            f.write(t.render(c))   #This works for me, but if this doesn't in pure Django, try render_to_string
        

        HTH

        【讨论】:

        • 感谢您的提示。以及如何部署?您是否编写了一些代码来循环数据库并针对每个条目运行上面的代码 - 然后推送结果?
        • 是的,我的构建脚本本质上是从一些文件中抓取内容,将它们合并到模板中并创建静态 HTML。我没有将其设置为自动推送,因为我不经常更改那里的内容,但这应该很容易做到。
        • 好吧,那种“自定义”构建脚本是我一直认为我必须结束的地方,但在这里看到其他人的 POV 真是太好了。而且我总有一部分人认为,如果我只是在网上问一下,一些邪恶的 Python 大师可能会等待一个自动魔术解决方案。
        【解决方案5】:

        您要求在静态环境中托管动态站点,这是不可能的。唯一的方法是导出所有文件,将它们放入静态服务器。你可以用wget来做,它会复制所有文件并将它们转换为html。

        这个问题的一个回退是,它只能创建 html 文件,如果有指向页面的链接,即。搜索表单等不会工作,基于Javascript的链接可能不工作。

        【讨论】:

        • 谢谢。我完全听到你关于动态与静态问题的看法。在我的幻想中,有一些漂亮的 Python 包将遍历您的数据库并一页一页地烘烤页面,就像 wget 从内到外一样。虽然我可能是在自欺欺人,我只需要硬着头皮磨练 wget 风格。
        • 在静态环境中,您不能运行任何应用程序。但只要你不经常更新,wget 会处理得很好,如果你更新,你需要 wget 到你的动态服务器(我猜是本地的)然后更新文件。
        【解决方案6】:

        我不熟悉将现有 django 网站转换为静态 html 网站的任何东西。可能值得看看新的 django/python PaaS 提供程序套件。像这样的网站应该很容易在其中一个平台上运行,而且每个月都应该很便宜。

        您可能想要结帐的一些提供商包括:

        【讨论】:

        • 感谢您的提示。我实际上正在考虑将静态文件作为 PaaS 站点的替代方案。我主要使用 Google App Engine,但我希望在他们即将转向更昂贵的定价计划之前削减成本。
        猜你喜欢
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 2011-12-18
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多