【问题标题】:How do I generate a static html file from a django template?如何从 django 模板生成静态 html 文件?
【发布时间】:2014-04-05 09:39:06
【问题描述】:

我是 Django 新手,我很确定我已经阅读或听说过这样做的方法,但我在任何地方都找不到。

我不想将渲染的输出从模板发送到浏览器,而是创建一个 html 文件,然后无需每次都经过渲染过程即可提供该文件。我正在一个与我们的主网站服务器分开的系统上进行开发,我需要定期为我们的用户提供我的数据快照,但不允许他们访问开发系统。

我的直觉告诉我,我应该能够以某种方式将响应重定向到一个文件,但我在此处的文档或其他帖子中没有看到它。

【问题讨论】:

  • 您总是可以将模板呈现为字符串,然后可以使用 vanilla Python 将其保存为文件。您的用例是否涉及更多?

标签: html django django-templates static-site static-html


【解决方案1】:

您可以利用 Django 的模板加载器将您的模板(包括您传递给它的任何上下文)作为字符串呈现,然后将其保存到文件系统中。如果您需要将该文件保存在外部系统上,例如 Amazon S3,您可以使用 Boto 库。

这是一个如何将视图呈现到文件的示例,使用可选的查询字符串参数作为触发器...

from django.shortcuts import render
from django.template.loader import render_to_string

def my_view(request):
    as_file = request.GET.get('as_file')
    context = {'some_key': 'some_value'}

    if as_file:
        content = render_to_string('your-template.html', context)                
        with open('path/to/your-template-static.html', 'w') as static_file:
            static_file.write(content)

    return render('your-template.html', context)

【讨论】:

  • @Paolo 的评论对我很有帮助。如果您收到“'ascii'编解码器无法编码字符”之类的错误。在 Python 2 中使用 Paolo 的方法。在 Python 3 中,执行 open('path', 'w', encoding='utf-8')
  • 为了避免隐藏的编码问题和头痛...也许将open('path/to/your-template-static.html', 'w')行更改为open('path/to/your-template-static.html', 'w', encoding="UTF-8")或您想要的任何其他编码。
【解决方案2】:

django-bakery 是一套完善的“将您的 Django 站点烘焙为平面文件的助手”。

【讨论】:

    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2017-05-09
    • 2017-06-21
    • 1970-01-01
    • 2013-06-18
    • 2017-01-22
    相关资源
    最近更新 更多