合并路径(相对路径)位于基本路径组件(完整路径)之外

时间:2019-02-14 07:56:17

标签: django django-templates sorl-thumbnail

我正在尝试使用缩略图包从基本图像生成缩略图。最初,我将源图像保存在静态目录中,并且由于缩略图包希望将其生成到媒体目录中,因此我认为这是我得到的SuspiciousFileOperation错误的原因。

没问题,我只是将图像复制到媒体目录中,我认为这可以解决问题,但是没有,问题仍然存在。

据我所知,相对路径与完整路径似乎是一个问题?

完整错误是:

const withCSS = require('@zeit/next-css')

module.exports = compose([[withCSS]])

路径/home/username/django/first_webapp/my_site/media/images/test.jpg是有效的,而test.jpg是有效的jpg图像。

我在模板中使用的带有sorl-thumbnail的简化代码(尽管我也尝试过easy_thumbnails):

SuspiciousFileOperation at /toys/
The joined path (/media/images/test.jpg) is located outside of the base path component (/home/username/django/first_webapp/my_site/media)
在这种情况下,

instance.image_url设置为{% for instance in prods %} <img src=" {% thumbnail instance.image_url 300x300 %} "> {% endfor %}

我的settings.py中的我的媒体目录设置

/media/images/test.jpg

我不确定从哪里开始进行故障排除。

1 个答案:

答案 0 :(得分:0)

我真的无法理解您如何认为字段类型无关。当然是。

在您的情况下,您(出于某种原因)使用了TextField来存储图像文件的路径。 TextField对媒体文件没有特殊知识,sort-thumbnail只是将内容视为路径组件,然后将其与MEDIA_ROOT结合在一起。但是,由于您的路径以斜杠开头,因此os.path.join(MEDIA_ROOT, path)的结果仅为path;前导斜杠表示“从文件系统根目录开始”。因此,结果是在项目外部创建了一条路径,出于安全原因,Django禁止使用该路径。

一个快速的解决方法是删除前导斜线-以及重复的“ media”前缀-并仅存储“ images / test.jpg”。但是真正的解决方法是对要存储的内容使用适当的字段,然后让该字段为您管理。