应该怎样 MEDIA_ROOTMEDIA_URL 在上下文中正确设置 ImageField?我应该如何设置 upload_to ImageField 的参数?评论 MEDIA_ROOTMEDIA_URL 稀缺,所以我想知道它们的用途以及如何正确设置它们。

有帮助吗?

解决方案

MEDIA_ROOT 是文件所在的目录,MEDIA_URL 必须是指向同一目录路径的 URL。

upload_to 选项可以是该目录中的一个目录,因此 upload_to="foo" 将进入 MEDIA_ROOT 的“foo”子目录。

或者它可以是一个函数,它采用图像字段实例和建议的基本文件名,并返回您要使用的真实文件名。所以

upload_to=get_photo_path 

和:

def get_photo_path(instance, filename):
  if not filename: return ""
  exts = re.search('[.]([^.]*)$',filename)
  if exts is None:
    ext  = ''
  else: 
    ext = '.'+exts.group(1)
  return "newname%s" % (ext)

将重命名该文件但保留扩展名。请注意“新名称." 仍会位于 MEDIA_ROOT 目录中 - 您不需要返回 "/usr/whatever/something/foo/newname.”。它已经为您添加了 MEDIA_ROOT。

更新:

仅供参考,很高兴了解

<modelobject>.<imagefieldname>.field.generate_filename( <modelobject>, proposed_name )

这是您从模型外部生成图像将进入的部分路径的方法。您需要手动在其前面添加 MEDIA_ROOT 以使其成为绝对路径。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top