【问题标题】:django: ImageField, MEDIA_ROOT, MEDIA_URL, how to set correctlydjango:ImageField、MEDIA_ROOT、MEDIA_URL,如何正确设置
【发布时间】:2010-07-09 18:06:59
【问题描述】:

MEDIA_ROOTMEDIA_URL 应该如何在ImageField 的上下文中正确设置?我应该如何为 ImageField 设置upload_to 参数? MEDIA_ROOTMEDIA_URL 的评论很少,所以我想知道它们是用来做什么的以及如何正确设置它们。

【问题讨论】:

    标签: django imagefield media-url


    【解决方案1】:

    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)
    

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

    更新:

    仅供参考,很高兴了解

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

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

    【讨论】:

    • 谢谢,这是一个非常好的解释。
    猜你喜欢
    • 2011-06-16
    • 2011-07-27
    • 2023-01-09
    • 1970-01-01
    • 2023-03-06
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多