Как получить доступ к медиа-файлам, загруженным через форму Django? - PullRequest
1 голос
/ 25 апреля 2020

Я принимаю изображение от пользователя в форме в Django. Как получить доступ к загруженному изображению, чтобы показать его в веб-браузере?

Это то, что у меня есть в settings.py

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

Это в моем models.py

class Hotel(models.Model):
    name = models.CharField(max_length=50)
    image = models.ImageField(upload_to="images/")

Кроме того, я добавил

if settings.DEBUG:
    urlpatterns +=static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

в urls.py

Я попытался получить доступ к изображению как

def image_view(request):
    if request.method=='POST':
        farm = hotelForm();
        form = hotelForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            modelff = Hotel(name=request.POST['name'],image = request.FILES['image'])
            # print(modelff.image.url)

        return render(request,'djangoform.html',{"form":farm,"uploaded_data_url":modelff.image.url})

    else:
        form = hotelForm()
        return render(request,'djangoform.html',{"form":form})

И в моем шаблоне Я получил доступ к изображению как <img src="{{uploaded_data_url}}">. Но изображение не отображается, и консоль показывает, что изображение не найдено.

PS Я видел Как получить доступ к медиа-файлам в django Как получить доступ к загруженным файлам в Django? https://docs.djangoproject.com/en/dev/howto/static-files/#serving -files- загружено пользователем во время разработки Django: доступ к загруженному изображению из ImageField Но, похоже, ни один из них мне не помог. Я не могу найти, как мне включить 'images/' в моем пути. Мой uploaded_data_url показывает /media/Screenshot%202020-04-18%20at%206.39.24%20PM.png, в то время как я ожидаю, что он покажет /media/images/Screenshot%202020-04-18%20at%206.39.24%20PM.png

В чем проблема?

Кроме того, если может быть что-то похожее на Как я могу получить загруженный текстовый файл просматривается через Django? (f.read() in this question) Было бы здорово.

Редактировать: Поскольку из ответа кажется, что вопрос не ясен, я хотел бы уточнить, что вышеизложенное было именно тем, что я пытался, и я действительно не знаю, правильно это или нет. Во-вторых, цель всего этого состояла в том, чтобы получить изображение от пользователя, обработать его и показать пользователю исходное и конечное изображение. Так что если есть какой-то другой метод, который вам нужно сделать, пожалуйста, поделитесь этим.

1 Ответ

0 голосов
/ 25 апреля 2020

Если uploaded_data_url показывает это /media/Screenshot%202020-04-18%20at%206.39.24%20PM.png, то это означает, что изображения были сохранены в директории media. Это ожидаемо, так как ваш conf MEDIA_URL = '/media/'.

. Если вы хотите, чтобы он был /media/images/Screenshot%202020-04-18%20at%206.39.24%20PM.png, тогда измените на MEDIA_URL = '/media/images/'.

. Проблема в том, что это будет мешать все другие медиа-файлы, поэтому более простым решением было бы заменить /media/ на /media/images/.

. Адаптируйте это в views.py

url = str(modelff.image.url)
modUrl = url.replace("/media/","/media/images/")
return render(request,'djangoform.html',{"form":farm,"uploaded_data_url":modUrl l})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...