我是否总是必须运行collectstatic来通过apache提供上传的图像?

时间:2013-09-04 19:31:15

标签: django apache django-staticfiles

我有一个网站,用户可以上传图片。它在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>

1 个答案:

答案 0 :(得分:1)

您应该将媒体文件与静态文件分开。媒体用于用户上传的文件,静态用于开发人员提供的文件(通常是样式和脚本)。 MEDIA_ROOTSTATIC_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>