2010-04-28 59 views
6

我在Django中有几个项目,并且偶尔在一个和另一个之间交替。它们都有一个/ media/path,由django.views.static.serve提供,它们都有一个/media/css/base.css文件。如何防止Django测试服务器中的HTTP 304

问题是,无论何时运行一个项目,请求base.css都会返回一个HTTP 304(未修改),可能是因为时间戳未更改。但是,当我运行另一个项目时,返回相同的304,使浏览器使用前一个项目缓存的文件(因此使用错误的样式表)。

只是为了记录在案,这里是中间件类:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.transaction.TransactionMiddleware', 
) 

我总是使用默认的地址http://localhost:8000。 是否有另一种解决方案(除了使用不同的端口 - 8001,8002等)?

+0

你好@Augusto男人。如果你不想使用默认的端口8000,那么你可以给你的端口不使用你的命令 - python manage.py runserver 8001 – 2015-08-21 08:40:05

回答

11

可以推出自己的中间件为:

class NoIfModifiedSinceMiddleware(object): 
    def process_request(self, request): 
     request.META.pop('HTTP_IF_MODIFIED_SINCE', None) 

基本上,它只是从请求删除HTTP_IF_MODIFIED_SINCE头。

事后:或者你可以monkeypatch django.views.static.serve和取代was_modified_since函数由一个,总是返回True

+0

hello @alex vasi!我有同样的问题,请详细说明您的答案,以便我可以undeerstand如何应用上面的代码。 – 2015-08-21 08:37:13

+0

阅读中间件,它们很简单,django文档非常棒。对于“monkeypatch”部分,这需要您找到安装djagno模块的位置,然后按照答案中的说明编辑django/view/static/serve。 – 2016-01-29 17:45:22

+0

请注意,在插入此中间件时,它必须是列表中的第一个中间件才能工作。感谢您的解决方案! – 2016-01-29 18:00:08