加入的路径(相对路径)位于基本路径组件(完整路径)之外

The joined path (relative path) is located outside of the base path component (full path)

我正在尝试使用缩略图包从基本图像生成缩略图。最初,我的源图像在我的静态目录中,并且由于缩略图包想要将它们生成到我的媒体目录中,我认为这就是我遇到的 SuspiciousFileOperation 错误的原因。

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

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

完整的错误是:

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)

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

我在我的模板中使用的带有 sorl-thumbnail 的删节代码(虽然我也尝试过 easy_thumbnails)是:

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

instance.image_url,在本例中,设置为/media/images/test.jpg

我的媒体目录设置来自 settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

我不确定从哪里开始解决这个问题。

我真的不能理解你怎么认为字段的类型不相关。当然是。

在您的情况下,您(出于某种原因)使用了 TextField 来存储图像文件的路径。 TextFields 没有媒体文件的特殊知识,sort-thumbnail 只是将内容视为路径组件,然后用 MEDIA_ROOT 加入。但是由于您的路径以前导斜杠开头,因此 os.path.join(MEDIA_ROOT, path) 的结果只是 path;前导斜线正好表示 "start from the filesystem root"。所以结果是你的项目之外的路径,出于安全原因 Django 不允许。

一个快速修复方法是删除前导斜杠 - 以及重复的 "media" 前缀 - 并只存储 "images/test.jpg"。但真正的解决方法是为您存储的内容使用适当的字段,并让该字段为您管理它。