На моем сайте пользователи могут загружать свои собственные изображения профиля, которыми я управляю через ImageField в модели UserProfile, которая расширяет основную модель User.Вот упрощенная версия модели UserProfile:
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, в зависимости от настроек, указанных пользователем?
Если я сохраню путь к Facebookизображение профиля в поле profile_picture
, я буду вынужден сделать проверку перед отображением каждого изображения профиля на сайте, в противном случае я получу свой MEDIA_ROOT / MEDIA_URL, предварительно предваренный к изображению:
/media/https://graph.facebook.com/[fbid]/picture
Мой другой вариант - добавить MEDIA_ROOT / MEDIA_URL в поле profile_picture
при загрузке изображения.К сожалению, единственный способ сделать это - использовать функцию add_profile_picture
в моем views.py, так как Django по умолчанию хранит пути к изображениям без начального слеша, а также потому, что PIL становится неестественным, если вы пытаетесь открыть изображение, относительный путь которогоначинается с косой черты.Однако, если я предварительно ожидаю полный путь к изображению, мне не нужно использовать функцию url
в моих шаблонах, и я могу просто отобразить изображение следующим образом, и оно будет работать правильно, независимо от того, загружено ли это изображение или изображение Facebook:
{{ user.get_profile.profile_picture }}
Однако оба эти варианта выглядят как хаки, и я чувствую, что должен быть более эффективный способ сделать это, поэтому я обращаюсь к SO за некоторым вдохновением / руководством по лучшим практикам здесь.
Заранее благодарим за помощь.