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

Jel*_*eRo 5 django django-contrib django-settings django-staticfiles

我不知道我是否混淆了目的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")
Run Code Online (Sandbox Code Playgroud)

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

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

ilk*_*ate 6

Django文档(具有它们相同父目录内大概正常的)具有静态根和媒体root作为同一目录阻碍。虽然文档中没有具体说明,但原因在于用户生成的文件存在固有的不确定性。如果静态文件和媒体文件都是从相似的目录提供的,那么在适当的情况下,用户可能能够上传任何文件,随后可能会提供这些文件。这当然会造成重大的安全漏洞——这就是为这两类文件设置两个单独目录的动机。

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

该文档还有一个关于在开发过程中为用户上传的文件提供服务的部分,您只需访问媒体文件所在的 url 即可完成,就像使用任何静态文件一样。你可以简单地附加

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

到您的 URL 配置。

django.contrib.staticfiles.views.serve()但是,不应用于部署。我在这里写了更多关于这方面的内容。强烈建议您在生产中从项目外部的目录提供静态文件(并根据需要存储和提供媒体文件)。