如果启用调试,Django静态文件将停止工作

时间:2011-11-02 19:17:00

标签: django

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'core.views.homepage', name='homepage'),
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
)

那是我的urls.py

如果我禁用DEBUG,静态文件可以正常工作,如果我重新打开它,则无效。

我的部分设置

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# URL prefix for admin static files -- CSS, JavaScript and images.
# Make sure to use a trailing slash.
# Examples: "http://foo.com/static/admin/", "/static/admin/".
ADMIN_MEDIA_PREFIX = '/static/admin/'

# Additional locations of static files
STATICFILES_DIRS = (

    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

对我来说真的很奇怪,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:21)

不,STATIC_ROOT不是由Django提供服务。在生产(调试关闭)中,您的Web服务器应该直接为此目录提供服务。在开发(debug on)中,不管怎样,你不应该有这个目录或任何东西。

让我再说一遍强调。您从不应该直接保存STATIC_ROOT中的任何资产。此目录仅用于collectstatic管理命令的输出。项目中的所有资产都应该保存在它所属的特定应用程序的static目录中。

现在,当然,您通常会拥有与单个应用程序无直接关系的资产,而是整个项目的整个项目。对于此方案,您在项目中创建单独的目录,并将所有公共资源放在那里。然后,将此目录添加到STATICFILES_DIRS设置。

在开发中,Django 提供该目录中的任何内容,而在生产中,collectstatic管理命令会将该目录中的资源提取到STATIC_ROOT