7

我不知道我是否混淆了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以便在我将图像召回/嵌入到我的 Markdown 文档中时可以使用媒体文件作为一个简单的参考,但正如你也可以看到的,我为 MEDIA_ROOT 创建了一个路径,它需要不同于 STATIC_ROOT。我担心的是我将媒体文件夹 , 放在文件this.media夹中STATICFILES_DIRS,这允许我使用这些静态文件过滤器将图像或视频调用到 Django 模板中,例如{% static 'image/file/path/here' %}. 如此方便,我还想知道如果我所有的文件、图像/视频和网页设计文件都只是进入 STATIC_ROOT,MEDIA_ROOT 的意义何在?据我所知,Django 没有collectmedia命令,所以我真的没有任何东西收集到 MEDIA_ROOT 文件夹中。我只是把它放在这里,空无一物。

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

4

2 回答 2

6

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

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

该文档还有一个关于在开发期间为用户上传的文件提供服务的部分,您可以通过访问媒体文件所在的 url 来完成此操作,就像使用任何静态文件一样。你可以简单地追加

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

到您的 URL 配置。

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

于 2015-08-06T16:32:21.273 回答
3

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

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

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

于 2015-08-06T17:43:42.567 回答