Django1.4中的静态文件管理

时间:2012-08-20 08:13:51

标签: django static-files django-staticfiles django-1.4

我已经对Django中的静态文件感到困惑了好几天。我发现一个解决方案运行正常。但是当我设置DEBUG = False时它崩溃了。所以我建立了一个新项目并做了一些测试以获得更清晰的外观。 首先,我使用默认设置创建项目。然后我将设置文件的一些行更改为:

STATIC_ROOT = '%s/site_media' % PROJECT_DIR
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(STATIC_ROOT, 'images'),
)

之后,我把'hi.jpg'放在'project_dir / images / hi.jpg'。我打电话给runserver并访问'http://127.0.0.1:8000/static/images/hi.jpg'。它不起作用。有什么问题?

2 个答案:

答案 0 :(得分:3)

以下是它的工作原理:当DEBUG=True时,Django自己提供静态文件。当DEBUG=False然后Django不再那样做了,你需要配置你的web服务器(比如Apache)。

Django在django.contrib.staticfiles中有一个机制(见Managing static filesThe staticfiles app)。它基本上意味着您需要运行collectstatic管理命令,该命令将搜索Django项目中/static/目录中的所有静态文件,并将它们放在一个目录(STATIC_ROOT)中。完成后,您的Web服务器可以提供该目录中的静态文件。

如果在运行collectstatic后找不到一个或多个静态文件,则表示您配置错误。

答案 1 :(得分:0)

settings.py

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'site_media')
MEDIA_URL = '/site_media/'
STATIC_URL = '/static/'

if DEBUG:
    STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
else:
    STATICFILES_DIRS = (
        os.path.join(PROJECT_DIR, 'static'),
    )

urls.py

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    ) 

:)

Django: Migrating from MEDIA_URL to STATIC_URL