ImageField
を使用してプロフィール写真をモデルに保存しています。
画像が定義されていない場合にデフォルトの画像を返すように設定するにはどうすればよいですか?
私はこれを試していませんが、フィールドのデフォルトとして設定できると比較的確信しています。
pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
[〜#〜] edit [〜#〜]:愚かなStackOverflowは他の人の答えにコメントさせませんが、その古いスニペットは何でもありませんあなたが欲しい。 Django-imagekit を強くお勧めします。これは、画像のサイズ変更や操作が非常に簡単かつクリーンに行われるためです。
理論的には、モデル定義内で関数を使用することもできます。しかし、これが良い習慣かどうかはわかりません。
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を使用して大成功を収めています
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」という名前の画像をメディアフォルダに追加します。
あなたはあなたの見解でこれを試すことができます:
{% ifequal object.image None %}
<img src="DEFAULT_IMAGE" />
{% else %}
display image
{% endifequal %}
あなたの画像フィールドで
field = models.ImageField(upload_to='xyz',default='default.jpg')
注:パスはMEDIA_ROOT内にある必要があります。
'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()
を使用できます。