私のサイトでは、自分自身のプロフィール画像をアップロードできます.ImageFieldは、コアUserモデルを拡張するUserProfileモデルで管理します。私は、アップロードされた画像のサムネイルバージョンを作成するために、PILを使用していDjango:ImageFieldに相対画像と絶対的な画像パスを保存する
class UserProfile(models.Model):
picture = models.ImageField(upload_to='img', blank=True, null=True)
profile_picture = models.ImageField(upload_to='img', default='img/profile/default_profile.png', blank=True, null=True)
user = models.ForeignKey(User, unique=True)
:ここでのUserProfileモデルの簡易版です。私のテンプレートでプロフィール画像を表示するには
次のように、私はドキュメントで推奨url
機能を使用しています:
{{ user.get_profile.profile_picture.url }}
ユーザーがフェイスブックに自分のアカウントを接続したときに、私が扱ってる問題があります自分のFacebookプロフィール画像を私のサイトのプロフィール画像として使用したいと考えています。
ユーザーが指定した設定に応じて、アップロードした画像またはFacebookのプロフィール画像の表示を処理する最善の方法は何ですか?
profile_picture
フィールドにFacebookのプロフィール画像へのパスを保存すると、サイトの各プロフィール画像を表示する前に確認する必要があります。そうしないと、MEDIA_ROOT/MEDIA_URLが事前に設定されます画像:
/media/https://graph.facebook.com/[fbid]/picture
私の他のオプションは、画像がアップロードされるたびprofile_picture
フィールドにMEDIA_ROOT/MEDIA_URLを追加することです。残念ながら、これを行う唯一の方法は、私のviews.pyのadd_profile_picture
関数です.Djangoはデフォルトでスラッシュの先頭に画像のパスを保存することと、相対パスで始まる画像を開こうとすると、スラッシュ。しかし、私は完全に画像のパスを事前に保留する場合は、私のテンプレートでurl
関数を使用する必要はありません、私は次のように画像を表示することができ、アップロードされた画像またはFacebookの画像であるかどうか正しく動作します:
{{ user.get_profile.profile_picture }}
しかし、これらのオプションの両方がハックのように感じ、これを行うには、より効率的な方法がなければならないような気がしますので、私はここでのベストプラクティスに関するいくつかのインスピレーション/指導のためのSOに回しています。
ご協力いただきありがとうございます。
+1ありがとうございました。オプション1と似たようなものになりました。 –