【问题标题】:Default image for ImageField in Django's ORMDjango ORM 中 ImageField 的默认图像
【发布时间】:2010-11-19 14:22:12
【问题描述】:

我正在使用ImageField 在我的模型上存储个人资料图片。

如果没有定义图像,如何设置它以返回默认图像?

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    我还没有尝试过,但我比较确定你可以在你的领域中将它设置为默认值。

    pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
    

    编辑:愚蠢的 StackOverflow 不允许我评论其他人的答案,但旧的 sn-p 不是你想要的。我强烈推荐django-imagekit,因为它可以非常轻松、干净地完成大量出色的图像大小调整和操作。

    【讨论】:

    • 感谢您提供的链接 - 看来我以后会经常使用该链接。
    • @ericflo:是的,StackOverflow 不允许你在声望达到 50 之前发表评论,这有点烦人。
    • 实际上这确实有效。虽然可能并不理想......它的行为更像是“初始”而不是“默认”,因为它在创建时将其设置为默认值,但如果您删除图像,它不会将该值设置回您的默认值。因此,您可能希望在某个地方将该默认值设置为常量,并在删除时手动将其重新设置。
    【解决方案2】:

    在models.py中

    image = models.ImageField(upload_to='profile_pic', default='default.jpg')
    

    在 settings.py 中添加:

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/'
    

    现在, 手动将名称为“默认”的图像添加到媒体文件夹中。

    【讨论】:

    • 试过了,但什么也没发生。
    • urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 添加到项目的 config/urls.py
    【解决方案3】:

    理论上,您也可以在模型定义中使用函数。但我不知道这是否是好的做法:

    class Image(model.Models):
        image = ....
    
        def getImage(self):
            if not self.image:
                # depending on your template
                return default_path or default_image_object
    

    然后在模板中

       <img src="img.getImage" />
    

    这为您未来提供了很大的灵活性...

    我正在使用 sorl 生成缩略图并取得了巨大成功

    【讨论】:

    • Django 已经为此提供了 url() 方法:
    • 是的,但这无法提供默认网址。您可以创建一个自定义 ImageField 类,如果图像值为 None,则返回默认 url。
    【解决方案4】:

    在您的图像字段中

    field = models.ImageField(upload_to='xyz',default='default.jpg')
    

    注意:路径应在 MEDIA_ROOT 内。

    【讨论】:

      【解决方案5】:

      你可以在你的模板中试试这个:

      {% ifequal object.image None %}
          <img src="DEFAULT_IMAGE" />
      {% else %}
          display image
      {% endifequal %}
      

      【讨论】:

      • {% if obj.image %}display{% else %}{% endif %} -- 烧掉所有 {% ifequal %} 标签!!跨度>
      • 如果您在所有视图中都需要它,您可以使用包含,您可以将其命名为 show_obj_image.html 然后使用 {% include "show_obj_image.html" %}
      【解决方案6】:

      您可以使用“默认”参数提供初始值。 如果已经有一个图像并且您想将其设置为默认值(而不是删除它),您可以尝试这样的操作:

      DEFAULT = 'img/default.jpg'
      
      class Example(models.Model):
          image = models.ImageField(default=DEFAULT)
      
          def set_image_to_default(self):
              self.image.delete(save=False)  # delete old image file
              self.image = DEFAULT
              self.save()
      

      如果您更喜欢默认设置,则可以使用set_image_to_default() 代替image.delete()

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 2023-03-19
        • 2015-06-14
        • 2014-09-01
        • 2013-11-26
        • 2015-02-22
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        相关资源
        最近更新 更多