我该如何从Django模板生成静态HTML文件?

34

我刚开始学习Django, 我确定我之前读过或听说过一种方法可以实现这个功能,但我无法找到相关信息。

与其将模板渲染输出发送到浏览器,我想创建一个HTML文件,然后可直接提供服务,而不需要每次都经过渲染过程。我正在开发一个系统,该系统与我们主要网站的服务器分开,我需要定期对我的数据进行快照,并向用户提供,同时不会让他们访问开发系统。

我的直觉告诉我应该可以通过某种方式将响应重定向到文件中,但我在文档或其他帖子中都没有找到相关内容。


您可以始终将模板渲染为字符串,然后使用原始的Python保存为文件。您的用例是否涉及更多内容? - Brandon Taylor
3个回答

38
你可以利用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' codec can't encode character”的错误,请使用Paolo在Python 2中的方法。在Python 3中,使用open('path', 'w', encoding='utf-8')。 - mattdedek
为避免隐藏的编码问题和头痛... 可以将行 open('path/to/your-template-static.html', 'w') 改为 open('path/to/your-template-static.html', 'w', encoding="UTF-8") 或者任何你想要的其他编码方式。 - elano7

6

django-bakery是一个出色的“为Django网站生成静态文件的帮助工具集”。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接