0

我需要创建一个页面,其中页面的一部分是相当长的计算结果,另一部分是显示计算的一些中间结果的图表。我实现它的方式是我有两个视图。一个视图进行计算并将中间结果存储在会话变量中。第二个视图从会话变量中检索中间结果,并使用 matplotlib 将值显示为图像。

问题是我找不到在第一个视图完成后执行第二个视图的方法。如果第二个视图首先执行,那么我会在图中看到旧数据。

这是一些伪代码:

视图.py:

def calc(request):
  ...
  do calculations
  store interim results in session variable
  return render_to_response(...'result':value...)

def graph(request)
  retrieve interim results from session variable
  create and return HttpResponse(content_type='image/png') with graph

网址.py:

(r'^report/$', 'calc',),
(r'^report/graph.png/$', 'graph',),

resultAndGraph.html:

Result: {{result}}
<img src="graph.png" width="400" height="400">
4

2 回答 2

0

我建议您设置Memcache并使用Django Caching 框架,而不是使用会话变量

但是,如果您想使用两个视图,则可以使用HttpResponseRedirect从第一个视图重定向到第二个视图

于 2012-06-22T20:10:44.490 回答
0

如果您有一个长时间运行的进程,请使用像celery这样的任务队列并将任务卸载到单独的进程。

在您的第二个视图中,只需检查此过程是否已完成,然后显示更新的信息(它也可以显示该过程仍在运行的通知)。

django-celery通过使用@cberner 建议的缓存机制,与 django 集成很容易。

于 2012-06-23T12:53:36.733 回答