在我的網站上,用戶可以上傳他們自己的配置文件圖片,我通過擴展核心User模型的UserProfile模型中的ImageField進行管理。以下是UserProfile模型的簡化版本: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)
我使用PIL創建上傳圖像的縮略圖版本。
要顯示模板中的個人資料圖片,我使用的文檔推薦url
功能如下:
{{ user.get_profile.profile_picture.url }}
我負責的是當用戶帳戶連接到Facebook的問題,並希望在我的網站上使用他們的Facebook個人資料圖片作爲他們的個人資料圖片。
取決於用戶指定的設置,處理顯示用戶上傳的圖像或他們的Facebook個人資料圖片的最佳方式是什麼?
如果我在profile_picture
字段中存儲了Facebook個人資料圖片的路徑,我將不得不在顯示網站上的每個個人資料圖片之前進行檢查,否則我會將我的MEDIA_ROOT/MEDIA_URL預先登錄到圖片:
/media/https://graph.facebook.com/[fbid]/picture
我的另一種選擇是,只要將圖像上傳到MEDIA_ROOT/MEDIA_URL添加到profile_picture
領域。不幸的是,唯一的方法是在我的views.py中使用add_profile_picture
函數,這是因爲Django默認將圖像路徑存儲爲沒有開始正斜槓的圖像,並且因爲如果您嘗試打開相對路徑開頭的圖像一個正斜槓。但是,如果我預先準備好完整的圖像路徑,則不必在我的模板中使用url
函數,並且我可以按如下所示顯示圖像,無論它是上傳的圖像還是Facebook圖像,它都能正常工作:
{{ user.get_profile.profile_picture }}
然而,這兩個選項都像黑客,我覺得必須有一個更有效的方法來做到這一點,所以我現在轉向SO尋求最佳實踐的靈感/指導。
在此先感謝您的幫助。
+1謝謝,結束了與選項1類似的東西。 –