我不知道我是否混淆了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时。我查看了静态文件的文档,它们对于媒体文件确实不是很有帮助。
答案 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对媒体文件做任何事情。