2

几天来,我一直对 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”。它不起作用。有什么问题?

4

2 回答 2

3

它是这样工作的:当DEBUG=TrueDjango 自己提供静态文件时。届时DEBUG=FalseDjango 将不再这样做,您需要配置您的 Web 服务器来执行此操作(例如 Apache)。

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

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

于 2012-08-20T08:25:54.807 回答
0

设置.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'),
    )

网址.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:从 MEDIA_URL 迁移到 STATIC_URL

于 2012-08-20T08:28:10.300 回答