Pythonywhere上的媒体目录/文件出现问题

Pythonywhere上的媒体目录/文件出现问题,python,django,django-models,pythonanywhere,Python,Django,Django Models,Pythonanywhere,我似乎有一个问题,在我的网站上提供媒体内容。在本地主机上运行时,一切正常。但是,当部署到python anywhere时,当我尝试通过表单上载图像时,会收到一个FileNotFoundError。 我已经通过overflow查看了一些相关主题,但是我还没有找到任何线程可以解决我的问题 以下是提交图像上载表单时收到的确切错误: models.py中的resize方法似乎有问题(在localhost上工作正常) 以下是相应的安装文件: 设置.py BASE_DIR = os.path.dirnam

我似乎有一个问题,在我的网站上提供媒体内容。在本地主机上运行时,一切正常。但是,当部署到python anywhere时,当我尝试通过表单上载图像时,会收到一个FileNotFoundError。 我已经通过overflow查看了一些相关主题,但是我还没有找到任何线程可以解决我的问题

以下是提交图像上载表单时收到的确切错误:


models.py中的resize方法似乎有问题(在localhost上工作正常)

以下是相应的安装文件: 设置.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
...
MEDIA_DIR = os.path.join(BASE_DIR, 'media')
# Media
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
IMAGES_DIR = os.path.join(MEDIA_URL,"images")

我相信这个错误是由于images\u path方法没有重新调整正确的位置(但它可以在localhost上工作)。以下是存储图像并定义图像保存方式的模型: models.py

class Image(models.Model):

    # this might work?
    def images_path():
        return os.path.join(settings.IMAGES_DIR, 'usruploads')

    def resize(self):
        im = PIL.Image.open(self.image)
        size=(200,200)
        out = im.resize(size)
        out.save(self.image.__str__())

    def save(self, *args, **kwargs):
        super(Image, self).save(*args, **kwargs)
        self.resize()

    image      = models.ImageField(upload_to=images_path()[1:], max_length=255)
我还将抛出在媒体目录结构的网站,以防这个信息是有用的

这是我第一次尝试通过python anywhere部署Django web应用程序,所以希望一旦这个问题得到解决,我再也不会犯这个错误了


我已经实现了您建议的更改,并且引用的url存在,这现在是一个开始,但是服务器声称它不存在。 我已打印出图像的URL和路径,如下所示: 我可以进入索引页面,输入这个url,它就会加载图像。

好的,你的建议是正确的,因为路径(而不是str)起作用了。出现第二个问题的原因是,当时我使用url打开图像,并试图使用path保存图像,但结果不是这样。谢谢你的帮助

给定 及

我们可以推断

IMAGES_DIR = "/media/images"

这意味着文件被上传到
//media/media/images/usruploads

问题 查看日志,错误发生在日志末尾

    ...
    out.save(self.image.__str__())
问题是
self.image.\uuu str\uuu()
返回文件的相对路径/文件名,当您将相对路径传递到
out.save
时,它将尝试将该文件保存在相对于当前工作目录提供的路径中

解决方案 您需要做的是(假设您要替换原始图像)传递原始图像的绝对路径:

    ...
    out.save(self.image.path)

好的,我已经注释掉了图像大小,它没有崩溃。我相信文件存储在/media/media/images/usruploads中,而调整大小的图像正在/media/images/usruploads中查看。我应该做哪些更改,以便PythonyWhere可以找到此文件夹?@NathanWelsh查看我添加的最后两个部分。此帮助页中会对此进行解释。需要使用完整的绝对路径,例如/home/yourrusername/project folder/myfile.txt。实际上,本帮助页对此进行了说明。需要使用完整的绝对路径,例如/home/yourusername/project folder/myfile.txt
image = models.ImageField(upload_to='media/images/usruploads', max_length=255)
    ...
    out.save(self.image.__str__())
    ...
    out.save(self.image.path)