Django的ORM中ImageField的默认图像

Yuv*_*uvi 23 django django-orm

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

如果没有定义图像,如何将其设置为返回默认图像?

小智 33

我没有试过这个,但我相对肯定你可以把它设置为你的领域的默认值.

pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
Run Code Online (Sandbox Code Playgroud)

编辑:愚蠢的StackOverflow不会让我评论其他人的答案,但旧的片段不是你想要的.我强烈推荐django-imagekit,因为它可以非常轻松,干净地完成大量的图像调整和操作.

  • 实际上这确实有效.虽然可能不理想......它的行为更像'初始'而不是'默认',因为它在创建时将其设置为默认值,但如果删除图像,则不会将值设置回默认值.因此,您可能希望将该默认值设置为某个常量,并在删除时手动设置它. (4认同)

小智 19

在models.py中

image = models.ImageField(upload_to='profile_pic', default='default.jpg')
Run Code Online (Sandbox Code Playgroud)

在 settings.py 中添加:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

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


小智 8

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

class Image(model.Models):
    image = ....

    def getImage(self):
        if not self.image:
            # depending on your template
            return default_path or default_image_object
Run Code Online (Sandbox Code Playgroud)

然后在模板中

   <img src="img.getImage" />
Run Code Online (Sandbox Code Playgroud)

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

我正在使用sorl进行缩略图生成并获得巨大成功

  • Django已经为此提供了url()方法:<img rel="nofollow noreferrer" src ="{{my_image.url}}"> (2认同)
  • 没错,但是无法提供默认网址.您可以使用默认URL创建自定义`ImageField`类,如果图像值为None,则返回该默认URL. (2认同)

小智 6

在您的图像字段中

field = models.ImageField(upload_to='xyz',default='default.jpg')
Run Code Online (Sandbox Code Playgroud)

注意:路径应该在 MEDIA_ROOT 内。


imj*_*uez 3

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

{% ifequal object.image None %}
    <img src="DEFAULT_IMAGE" />
{% else %}
    display image
{% endifequal %}
Run Code Online (Sandbox Code Playgroud)

  • {% if obj.image %}display{% else %}&lt;img src="default" /&gt;{% endif %} -- 烧毁所有 {% ifequal %} 标签! (14认同)