我已经对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'。它不起作用。有什么问题?
答案 0 :(得分:3)
以下是它的工作原理:当DEBUG=True
时,Django自己提供静态文件。当DEBUG=False
然后Django不再那样做了,你需要配置你的web服务器(比如Apache)。
Django在django.contrib.staticfiles
中有一个机制(见Managing static files和The 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}),
)
:)