コメントで述べたように、非同期のバックグラウンドタスクでこれを処理し、結果をDjango低レベルキャッシュに保存する必要があるようです。私は個人的にタスクキューにセロリを使用します。
基本的に、ページ1が要求された後、非同期タスクを追加してページ2の計算を開始し、結果をキャッシュに保存します。したがって、ページ2が要求されたときに、キャッシュ内の事前にレンダリングされた応答を確認し、存在しない場合は、値を同期的に計算できます。
したがって、コードは次のようになります(タスクはアプリのtask.pyファイルにありますが、これで一般的なアイデアが得られるはずです)。
from celery import task
from django.core.cache import cache
def page_two_calculation(arg1, arg2):
return arg1 + arg2
@task
def page_two_task(arg1, arg2):
result = page_two_calculation(arg1, arg2)
cache_key = "page-two-%s-%s" (arg1, arg2)
cache.set(cache_key, result)
def page_one(request, arg1, arg2):
# Start the page two task
page_two_task.delay(arg1, arg2)
# Return the page one response
return HttpResponse('page one')
def page_two(request, arg1, arg2)
cache_key = "page-two-%s-%s" (arg1, arg2)
result = cache.get(cache_key)
if result is None:
# the result will only be None if the page 2 calculation
# doesn't exist in the cache, in which case we'll have to
# return the value synchronously.
result = page_two_calculation(arg1, arg2)
return result