Как исправить путь при загрузке изображения с формы в django?

Всем привет.

Сейчас при загрузке изображение через форму, файл имеет путь типа:

sitename.ru/media/media/ex_friend.jpg

Т.е. идет два раза путь media.

Из-за двойного пути в итоге вещи типа: {{ profileinfo.avatar.url }} - не работают.

В самой модели upload_to - пуст

Пути:

STATIC_URL = '/static/'

MEDIA_URL = '/media/'

STATIC_ROOT = os.path.join(BASE_DIR, "static")

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

STATICFILES_DIRS = (
)


___________________________________________________

Модель

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='', blank=True, null=True, help_text="Идеальный размер 150 на 150 пикселей",
                               verbose_name="Аватар юзера")
    myself = models.TextField(default='Напишите о себе', help_text="Свободное описание юзера", verbose_name="О себе")
    myoffer = models.TextField(default='Напишите о ваших уменениях', help_text="Свободное описание юзера",
                               verbose_name="Что предлагаю")


# Форму для заполнения профиля

class Profile_Form(forms.Form):
    avatar = forms.ImageField(label='Загрузить Аватар', required=False)
    myself = forms.CharField(widget=forms.Textarea(attrs={'class': 'course_review_form_width'}), label='О себе',
                             required=False)
    myoffer = forms.CharField(widget=forms.Textarea(attrs={'class': 'course_review_form_width'}), label='Что предлагаю',
                              required=False)


Вьюшка, которая обрабатывает загрузку видео:

def update_profile(request, add_id):
    token = {}
    token.update(csrf(request))
    if request.user.is_authenticated():
        current_user = request.user

        useritem = User.objects.get(id=current_user.id)

        try:
            if useritem.profile is not None:
                if request.POST:
                    form = Profile_Form(request.POST or None, request.FILES or None)
                    if form.is_valid():

                        if form.cleaned_data['avatar']:
                            avatar = form.cleaned_data['avatar']
                            #Берем изображение из ввода в форму, и с помощью easy_thumbnails - кропим его еще до сохранения в базу
                            options = {'size': (200, 200), 'crop': True}
                            thumb_url = get_thumbnailer(avatar, relative_name=str(current_user.id)).get_thumbnail(options).url
                            useritem.profile.avatar = thumb_url

                            useritem.profile.save(update_fields=['avatar'])

                        if form.cleaned_data['myself']:
                            myself = form.cleaned_data['myself']
                            useritem.profile.myself = myself
                            useritem.profile.save(update_fields=['myself'])

                        if form.cleaned_data['myoffer']:
                            myoffer = form.cleaned_data['myoffer']
                            useritem.profile.myoffer = myoffer
                            useritem.profile.save(update_fields=['myoffer'])

                        return profile(request, current_user.id)
                    else:
                        return redirect('/', token)
                else:
                    return redirect('/', token)
            else:
                return redirect('/', token)
  • Вопрос задан
  • 358 просмотров
Решения вопроса 1
Terras
@Terras Автор вопроса
В общем. Там есть такая настройка:

THUMBNAIL_MEDIA_URL = '' - по-умолчанию она дает такой же путь, как и медиа рут. И если мы режем фото на этапе загрузки, то идет процесс:

Берем фото из формы + добавляем руты
Режем фото в шорткат + добавляем руты

В итоге идет двойной медиа рут.

Если поставить вот так THUMBNAIL_MEDIA_URL = '/' - то рут второй раз не ставится, и все окей.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы