Django:是" collectstatic"应该收集媒体文件?

时间:2015-08-06 15:56:42

标签: django django-staticfiles django-settings django-contrib

我不知道我是否混淆了collectstatic的目的。这是我的设置模块

# BASE_DIR is the location of my django project folder

STATIC_URL = '/this.static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_static_root")
STATICFILES_DIRS = (

    os.path.join(BASE_DIR, "this.static"),
    os.path.join(BASE_DIR, "this.media"),

                    )
MEDIA_URL = '/this.media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_media_root")

在这里,我将我的静态文件和媒体文件放在STATICFILES_DIRS中,这样当我回想起/将图像嵌入到我的降价文档中时,我可以使用媒体文件作为一个简单的参考,但是你也可以看到,为MEDIA_ROOT创建了一条路径,它需要与STATIC_ROOT不同。我担心的是我将我的媒体文件夹this.media放在STATICFILES_DIRS文件夹中,这允许我使用这些静态文件过滤器(如{% static 'image/file/path/here' %})将图像或视频调用到Django模板中。尽管如此,我还想知道如果所有文件,图像/视频和网页设计文件都进入STATIC_ROOT,MEDIA_ROOT的重点是什么?据我所知,Django没有collectmedia命令,所以我没有收集到MEDIA_ROOT文件夹中的任何内容。我只是把它拿出来,空虚和所有。

我错过了什么吗?任何人都了解Django对此的看法?你的观点是什么?我不确定collectstatic是否也应该涉及收集媒体文件,尤其是当我有MEDIA_ROOT时。我查看了静态文件的文档,它们对于媒体文件确实不是很有帮助。

2 个答案:

答案 0 :(得分:4)

Django documentation不鼓励将静态根和媒体根作为同一目录(将它们放在同一个父目录中可能是正常的)。虽然在文档中没有特别充实,但其原因围绕着用户生成文件的固有不确定性。如果静态文件和媒体文件都是从类似目录提供的,那么在适当的情况下,用户可能能够上传任何随后可能提供的文件。这当然会产生重大的安全漏洞 - 这是为这两类文件提供两个独立目录的动机。

collectstatic依赖于STATICFILES_DIRS数组来生成collectstatic应搜索静态文件的目录列表。如果您在STATICFILES_DIRS中包含媒体文件,则在运行collectstatic时(由您或Fabric等自动服务发起),媒体和静态文件将同时存在输出目录。

该文档还有一个关于Serving files uploaded by a user during development的部分,您只需访问存在媒体文件的URL,就像使用任何静态文件一样。你可以简单地追加

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

到您的网址配置。

但是,

django.contrib.staticfiles.views.serve()不应该用于部署。我已经写了更多关于这个here的文章。强烈建议您在生产中从项目外部的目录中提供静态文件(并根据需要存储和提供媒体文件)。

答案 1 :(得分:1)

媒体文件是用户上传到Django网站的文件。

静态文件是您希望作为网站一部分提供的文件(通常是CSS,JavaScript和图像)。

因此我不希望collectstatic对媒体文件做任何事情。