【问题标题】:Incorrect URL to file in Django adminDjango admin 中的文件 URL 不正确
【发布时间】:2019-02-17 02:42:31
【问题描述】:

我收到了错误的 URL,指向已上传到 Django 管理中的媒体文件夹的文件。

文件的网址是:

/media/Users/hammer/Dev/*****/media/attachments/2018/09/12/pdf-test.pdf

但文件的正确 URL 是:

/media/attachments/2018/09/12/pdf-test.pdf

似乎 MEDIA_ROOT (/Users/hammer/Dev/*****/media/) 是(我猜是不正确的)在 URL 中的第一个 /media/ 之后添加的。

MEDIA_URL 是:

MEDIA_URL = '/media/'

MEDIA_ROOT 是:

MEDIA_ROOT = settings.BASE_DIR + '/media/'

模型文件字段的定义是:

    file = models.FileField(upload_to=settings.MEDIA_ROOT + "attachments/%Y/%m/%d/", null=True)

文件字段的错误 URL 出现在文件字段模型的更改页面上。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 不,没有想法,因为您没有提供任何细节。 MEDIA_URL 设置为什么?模型中该字段的定义是什么,尤其是upload_to 参数?您在哪里看到这个不正确的 URL 以及显示它的代码是什么?
  • 感谢您的回复。我现在已经提供了您在问题中要求的详细信息。

标签: django


【解决方案1】:

您不应在 upload_to 参数中专门包含 MEDIA_ROOT。见documentation

如果您使用默认的 FileSystemStorage,字符串值将附加到您的 MEDIA_ROOT 路径,以形成本地文件系统上存储上传文件的位置。

所以,只需删除它:

file = models.FileField(upload_to="attachments/%Y/%m/%d/", null=True)

不过,您需要在数据库中使用不正确的值重新创建实例。

【讨论】:

  • 另外,如果他们已经在数据库中存储了绝对路径,那么他们应该确保从现有数据中删除前缀/media/Users/hammer/Dev/*****/media/,只保留从upload_to开始的相对路径。
  • @jpic 数据库中存储了绝对路径,所以我必须修复它。
  • Django 文件路径应该在数据库中没有 MEDIA_ROOT 的相对路径。
猜你喜欢
  • 2013-09-09
  • 2013-09-01
  • 2011-07-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2015-11-24
相关资源
最近更新 更多