我有一个网站,用户可以上传图片。它在django自己的服务器上运行良好。但我使用apache来同时提供我的app和静态。当我上传任何图像时,我看不到图片。只有当我跑collectstatic
时,我才能看到它们。我是否必须始终运行collectstatic
?有没有更好的方法呢?
我的settings.py代码段:
MEDIA_ROOT = 'C:/Users/Robin/web/leo/static'
STATIC_ROOT = 'C:/Users/Robin/static/'
STATICFILES_DIRS = (
"C:/Users/Robin/web/leo/static",
Apache http.cont片段:
AliasMatch ^/([^/]*\.css) C:/Users/Robin/static/styles/$1
Alias /static/ C:/Users/Robin/static/
<Directory C:/Users/Robin/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / C:/Users/Robin/web/leo/leo/wsgi.py
<Directory C:/Users/Robin/web/leo/leo>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
答案 0 :(得分:1)
您应该将媒体文件与静态文件分开。媒体用于用户上传的文件,静态用于开发人员提供的文件(通常是样式和脚本)。 MEDIA_ROOT
和STATIC_ROOT
应指向不同的目录。您运行collectstatic
将所有静态文件从您的源代码和各种应用程序(也是第三方)复制到STATIC_ROOT
,以便Apache可以为它们提供服务。您无需运行collectstatic
以及任何特殊内容即可为您的媒体文件提供服务。
示例配置:
Alias /static/ C:/Users/Robin/static/
Alias /media/ C:/Users/Robin/media/
<Directory C:/Users/Robin/static>
Order deny,allow
Allow from all
</Directory>
<Directory C:/Users/Robin/media>
Order deny,allow
Allow from all
</Directory>