为什么Django使用django.views.static.serve缓存我的静态?

问题描述:

我在我的本地开发服务器上有static.serve安装程序,但它似乎缓存静态文件(在我的情况下,CSS,JavaScript和图像),直到我重新启动服务器。我不使用Apache和我有缓存设置为:为什么Django使用django.views.static.serve缓存我的静态?

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 

删除缓存声明一起似乎并没有帮助的。

在我从较早的1.1版本升级到1.2.5之前,这并没有发生。

每次我进行样式更新时,每次都需要重新启动开发服务器(通过触摸python文件或通过命令行)是一种痛苦。

编辑 - 的建议,我已经添加了settings.py和url.py

Settings.py

# Django settings for zeiss_elearning project. 
from django.utils.translation import ugettext_lazy as _ 
gettext = lambda s: s 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    ('Jason Roy', '###'), 
) 

#Email settings 

EMAIL_HOST = '###' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = '####' 
DEFAULT_FROM_EMAIL = '[email protected]' 
MANAGERS = ADMINS 

DATABASES = { 
'default': { 
    'ENGINE' : 'django.db.backends.mysql', 
    'NAME' : '###', 
    'USER' : '###', 
    'PASSWORD' : '###', 
    'HOST' : '/Applications/MAMP/tmp/mysql/mysql.sock', 
} 
} 

TIME_ZONE = 'America/Tijuana' 


LANGUAGE_CODE = 'en-us' 

SITE_ID = 1 

USE_I18N = True 

USE_L10N = True 

MEDIA_DEBUG_DOC_ROOT = '/Users/jason/Bird Takes Bear/Projects/Carl Zeiss/site 2.0/media' 
MEDIA_ROOT = '/Users/jason/Bird Takes Bear/Projects/Carl Zeiss/site 2.0/media' 

MEDIA_URL = '/static_files/' 

ADMIN_MEDIA_PREFIX = '/media/admin/' 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = '####' 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.cache.UpdateCacheMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.doc.XViewMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'cms.middleware.page.CurrentPageMiddleware', 
    'cms.middleware.user.CurrentUserMiddleware', 
    'cms.middleware.toolbar.ToolbarMiddleware', 
    'cms.middleware.media.PlaceholderMediaMiddleware', 
    #'django.middleware.cache.FetchFromCacheMiddleware', 
    #'debug_toolbar.middleware.DebugToolbarMiddleware', 
) 

ROOT_URLCONF = 'zeiss_elearning.urls' 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.request', 
    'django.core.context_processors.media', 
    'cms.context_processors.media', 
) 

TEMPLATE_DIRS = (, 
    '/Users/jason/Bird Takes Bear/Projects/Carl Zeiss/site 2.0/templates', 
    '/Users/jason/Bird Takes Bear/Projects/Carl Zeiss/site 2.0/cms/templates', 
) 

SESSION_COOKIE_AGE = 86400 

LOGIN_URL = '/membership/login/' 

LOGIN_REDIRECT_URL = "/" 

AUTHENTICATION_BACKENDS = ( 
    'zeiss_elearning.shared.email_auth.EmailBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 
AUTH_PROFILE_MODULE = 'membership.UserProfile' 
FORCE_SCRIPT_NAME = '' 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.admin', 
    'cms', 
    'cms.plugins.text', 
    'cms.plugins.picture', 
    'cms.plugins.link', 
    'cms.plugins.file', 
    'cms.plugins.snippet', 
    'cms.plugins.googlemap', 
    'cms.plugins.zeiss_video', 
    'cms.plugins.html', 
    'cms.plugins.quiz', 
    'cms.plugins.popup', 
    'mptt', 
    'publisher', 
    'zeiss_elearning.forms', 
    'zeiss_elearning.membership', 
    'zeiss_elearning.quiz', 
    'menus', 
    'south', 
) 
INTERNAL_IPS = ('127.0.0.1',) 

#CMS Settings 


CMS_REDIRECTS = True 
CMS_MENU_TITLE_OVERWRITE = True 
CMS_DBGETTEXT = False 

CMS_DEFAULT_TEMPLATE = 'base.html' 
CMS_ALLOW_HTML_TITLES = False 

CMS_TEMPLATES = (
    ('base.html', _('Default')), 
    ('cirrus.html', _('Cirrus')), 
    ('atlas.html', _('Atlas')), 
) 

# Site title for your template 
CMS_SITE_TITLE = 'Zeiss Cirrus' 

CMS_LANGUAGE_REDIRECT = False 

CMS_LANGUAGES = (
    ('en', gettext('English')), 
) 
LANGUAGES = (
    ('en', gettext('English')), 
) 
CMS_APPLICATIONS_URLS = (
('zeiss_elearning.quiz.urls', 'Quiz') 
) 

urls.py

from django.conf.urls.defaults import * 
from django.contrib import admin 
from django.conf import settings 

admin.autodiscover() 

urlpatterns = patterns('', 
    (r'^membership/', include('zeiss_elearning.membership.urls')), 
    (r'^admin/', include(admin.site.urls)), 

) 
urlpatterns += patterns('', 
    url(r'^', include('cms.urls')), 
) 
if settings.DEBUG: 
    urlpatterns += patterns('', 
     (r'^static_files/(?P<path>.*)$', 'django.views.static.serve', 
     {'document_root': settings.MEDIA_DEBUG_DOC_ROOT}),) 
+0

你确定他们没有被缓存在你的浏览器吗? – 2011-03-05 00:19:01

+0

不幸的是,这不是问题。我已经检查了所有可以想象的方式(清除缓存,在多个浏览器中打开一个静态文件,等等)。 – Jason 2011-03-05 00:25:51

+0

缓存后端与资产缓存没有任何关系。浏览器中的F5刷新浏览器缓存。 – 2011-03-05 11:27:35

底线在这里,根据在提供的数据上,似乎是您的浏览器正在缓存媒体文件。推荐的解决方法是刷新浏览器中的页面。查看你的帖子上的所有评论。

但是,如果你真的不希望媒体文件被缓存,你可以简单地设置它们不断的唯一名称。像这样。

<link rel="stylesheet" type="text/css" href="/site_media/css/style.css?{% now "U" %}" /> 

现在每次重新加载页面时的文件名会有点不同的基于Unix的时间戳,迫使浏览器重新加载它所有的时间。

这是现在一个很老的问题,但对于谁降落在这里通过搜索引擎的人,采取了类似的问题,看看我的回答:https://stackoverflow.com/a/18162302/1248175