【问题标题】:Django FileField url not relativeDjango FileField url 不是相对的
【发布时间】:2010-12-17 21:22:57
【问题描述】:

我有类似的东西:

MEDIA_ROOT = '/home/httpd/foo/media/'
MEDIA_URL = 'http://www.example.org/media/'

(...)

file = models.FileField(upload_to='test') 

当我在管理页面中创建具有该字段的对象时,Django 将完整的文件路径存储在数据库中,例如:“/home/httpd/foo/media/test/myfile.pdf”。这与docs 中所说的相反。

所有将存储在您的 数据库是文件的路径 (相对于 MEDIA_ROOT)。

当我在模板中使用 file.url 时,我得到如下信息:

http://www.example.org/home/httpd/foo/media/test/myfile.pdf

而不是我想要的:

http://www.example.org/media/test/myfile.pdf

我做错了什么?

【问题讨论】:

  • 您是在使用没有自定义的默认管理员吗?例如,您编写的代码没有干扰该字段的保存方式?
  • (管理员对另一个模型成员进行了不相关的 M2M 自定义)

标签: django file django-models


【解决方案1】:

我刚刚在我的一个项目中做了一个示例 FileField,它似乎可以按您的预期工作。这里有几件事可以尝试。

尝试进行如下设置。我知道他们说不以 / 结束您的 MEDIA_URL 是不好的,但我就是这样做的,我更喜欢它。您只需要记住,每当您在模板中使用 MEDIA_URL 时,在其后面加上斜线即可:href="{{ MEDIA_URL }}/path/to/file"

MEDIA_ROOT = '/home/httpd/foo/media'
MEDIA_URL = '/media'

如果这没有任何帮助,请创建一个新的简化模型,并使用未自定义的 FileField 并查看您是否仍然遇到同样的问题。

【讨论】:

  • 你是对的,它按照你说的方式工作。我怀疑发生的事情是 Web 服务器仍在使用旧的 python 文件。我最近过渡到生产服务器,所以有时我仍然忘记“触摸”配置文件以应用更改。
  • 从 Django 1.9 开始,不可能不以斜杠结尾 media_url :ImproperlyConfigured "If set, MEDIA_URL must end with a slash"
猜你喜欢
  • 2014-07-18
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2018-01-10
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多