2011-10-27 121 views
0

嗨有一个表单和许多输入模板,通过POST请求传递一个数据到一个视图,处理它们并将结果发送到另一个模板。在最终模板中,如果我使用浏览器后退按钮跳转到第一个视图,我可以再次看到旧数据。我刷新页面并插入新数据,然后再次提交,但是当我看到最终视图时,仍然会保留一些旧数据。即使我重新启动调试服务器,问题仍然存在。我如何防止它?它似乎有一些数据缓存,我可以解决只刷新浏览器缓存。这是查看代码:http://dpaste.com/640956/和第一个模板代码:http://dpaste.com/640960/django发布请求数据缓存

有什么想法吗?

tnx - luke

+1

这是什么'__contains__'东西?你的意思是'如果'iono'在request.POST'中。无论如何,你应该使用Django表单。 –

+0

问题依然存在:我试过了danihp的解决方案:我在my_app文件夹内创建了一个'util'文件夹,并使用发布的代码创建了一个NoCacheMiddleware.py文件。那么我已经在setting.py中间件部分放入了以下字符串:'my_app.util.NoCacheMiddleware.NoCacheMiddleware'。服务器启动,第一页加载没有错误,但即使我尝试在第一个模板中插入数据并提交它,在第二个我有新旧数据的混合。我还在基本模板的html头部中添加了杂注无缓存元标记,但这两者都没有帮助...我没有其他想法。任何建议 – 2011-10-29 00:53:25

回答

0

是不是django谁填充形式。是缓存导航器。您应该关闭缓存导航器。我使用自定义的中间件要做到这一点:

from django.http import HttpResponse 

class NoCacheMiddleware(object): 

    def process_response(self, request, response): 
     response['Pragma'] = 'no-cache' 
     response['Cache-Control'] = 'no-cache must-revalidate proxy-revalidate no-store' 
     return response 

记得在settings.py添加中间件:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'ghap.utils.middleware.NoCacheMiddleware', 
) 
+0

tnx。有没有办法通过render_to_response做到这一点?在任何情况下,我怎么能整合你的soultion在我的情况? – Luke

+0

您应该在某些应用程序上创建一个名为NoCacheMiddleware的文件。将NoCacheMiddleware类复制到此文件中,并将“路径”文件附加到settyings.py上的MIDDLEWARE_CLASSES。 – danihp