web-dev-qa-db-ja.com

DjangoのORMのImageFieldのデフォルト画像

ImageFieldを使用してプロフィール写真をモデルに保存しています。

画像が定義されていない場合にデフォルトの画像を返すように設定するにはどうすればよいですか?

22
Yuvi

私はこれを試していませんが、フィールドのデフォルトとして設定できると比較的確信しています。

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

[〜#〜] edit [〜#〜]:愚かなStackOverflowは他の人の答えにコメントさせませんが、その古いスニペットは何でもありませんあなたが欲しい。 Django-imagekit を強くお勧めします。これは、画像のサイズ変更や操作が非常に簡単かつクリーンに行われるためです。

32
ericflo

理論的には、モデル定義内で関数を使用することもできます。しかし、これが良い習慣かどうかはわかりません。

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を使用して大成功を収めています

8
msmart

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/'

次に、手動で、「default」という名前の画像をメディアフォルダに追加します。

3
Manish

あなたはあなたの見解でこれを試すことができます:

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

あなたの画像フィールドで

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

注:パスはMEDIA_ROOT内にある必要があります。

2
cz game

'default'パラメーターを使用して初期値を指定できます。すでに画像があり、(削除するのではなく)デフォルトに設定したい場合は、次のような方法を試すことができます。

_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()を使用できます。

0
Balik