django:ImageField,MEDIA_ROOT,MEDIA_URL,如何正确设置

gru*_*czy 4 django imagefield media-url

应该怎样MEDIA_ROOTMEDIA_URL被在上下文中正确设置ImageField?我应该如何设置upload_toImageField的参数?评论MEDIA_ROOTMEDIA_URL稀缺,所以我想知道,他们使用了什么以及如何正确设置它们.

eru*_*orm 9

MEDIA_ROOT是您希望文件到达的目录,MEDIA_URL需要是指向同一目录路径的URL.

upload_to选项可以是该目录中的目录,因此upload_to ="foo"将进入MEDIA_ROOT的"foo"子目录.

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

upload_to=get_photo_path 
Run Code Online (Sandbox Code Playgroud)

和:

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)
Run Code Online (Sandbox Code Playgroud)

将重命名该文件但保留扩展名.请注意,"newname."仍然在MEDIA_ROOT目录中 - 您不需要返回"/ usr/whatever/something/foo/newname. ".它已经为你解决了MEDIA_ROOT问题.

更新:

仅供参考,很高兴知道

<modelobject>.<imagefieldname>.field.generate_filename( <modelobject>, proposed_name )
Run Code Online (Sandbox Code Playgroud)

这是如何从模型外部生成图像将进入的部分路径.您需要手动将MEDIA_ROOT前置到此处以使其成为绝对路径.