web-dev-qa-db-ja.com

Djangoテンプレートから静的HTMLファイルを生成するにはどうすればよいですか?

私はDjangoを初めて使用するので、これを実行する方法を読んだり聞いたりしたことは確かですが、どこにも見つかりません。

テンプレートからブラウザーにレンダリングされた出力を送信するのではなく、毎回レンダリングプロセスを実行する必要なく提供できるhtmlファイルを作成したいと思います。私はメインのWebサイトのサーバーとは別のシステムで開発しています。ユーザーが開発システムにアクセスできないように、定期的にデータのスナップショットをユーザーに提供する必要があります。

私の直感では、なんとかして応答をファイルにリダイレクトできるはずですが、ドキュメントやここの他の投稿には表示されません。

27
Beverly Block

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)
22
Brandon

Django-bakery は、よく開発された「フラットなファイルとしてDjangoサイトを焼き出すためのヘルパーのセット」です。

4
guaka