Найти - Пользователи
Полная версия: Django. Проблема с отображением изображений
Начало » Django » Django. Проблема с отображением изображений
1
pypi4goda
Добрый день, господа. Вот такая проблема.

У меня в проекте у пользователей есть возможность обновлять некоторое изображение, которые напрямую сохраняются на сервере с помощью FileSystemStorage, модуля os и такого кода:

if response.FILES.get("izobrazhenie", False):
form = forms.UploadIzobrazhenieForm(response.POST, response.FILES)
if form.is_valid():
_ = response.FILES["izobrazhenie"]
fss = FileSystemStorage()
name_of_new_file = os.path.join(BASE_DIR, f"static/{response.user.pk}{_.name[-4:]}")
try:
os.remove(name_of_new_file)

except FileNotFoundError:
pass

finally:
fss.save(name_of_new_file, _)

Однако когда после обновления пользователь проверяет успешное его применение, то ему показывается старое, не обновленное изображение, хотя на самом сервере оно было обновлено и если открыть файл по указанному пути, он был изменен. Отображаю файл при помощи такого html-кода:

<img src="ТУТ ФОРМИРУЕТСЯ ССЛЫКА" alt="izobrazhenie" width="250" height="250" class="indent">

Стоит знать, что я пробовал в html и django-view, отвечающих за данную страничку, встроенные возможности Django-Кеширования, когда плохо в нем разберался. Тогда и возникла эта проблема, однако когда код кеширования я убрал, проблема осталось. В т.ч. пробовал пересобирать venv, но это не помогало.

Проблема решается только путем перезахода в браузер (перезагрузки).

Есть-ли у кого либо идеи, как подобную ерунду разрешить? Буду крайне благодарен за помощь.
py.user.next
pypi4goda
  
_ = response.FILES["izobrazhenie"]
Не используй одно подчёркивание в качестве имени нигде. Только чтобы заглушить что-то оно используется. Так что для начала дай ему нормальное имя.

pypi4goda
  
        except FileNotFoundError:
            pass
Также здесь выведи что-то в лог или куда-нибудь. Может, оно срабатывает, а ты не знаешь.
pypi4goda
Спасибо, что откликнулись!

Нет, исключение не срабатывает.

У меня при закрытии браузера сбрасываются куки и данные сайтов. Может быть, это все как-то связано?
py.user.next
pypi4goda
У меня при закрытии браузера сбрасываются куки и данные сайтов. Может быть, это все как-то связано?

Попробуй вот в этом fss
pypi4goda
  
fss = FileSystemStorage()
поискать какой-то финализатор. Возможно, он там есть.

pypi4goda
Проблема решается только путем перезахода в браузер (перезагрузки).
pypi4goda
У меня при закрытии браузера сбрасываются куки и данные сайтов.
pypi4goda
Стоит знать, что я пробовал в html и django-view, отвечающих за данную страничку, встроенные возможности Django-Кеширования, когда плохо в нем разберался. Тогда и возникла эта проблема, однако когда код кеширования я убрал, проблема осталось.


pypi4goda
хотя на самом сервере оно было обновлено и если открыть файл по указанному пути, он был изменен
Прямо вот обновляешь страницу в браузере и она показывает старое изображение каждый раз? А при этом на диске лежит уже новое изображение? И только при стирании печенья и кеша в браузере всё меняется на новое изображение? Можешь попробовать на время отключить стирание печенья и кеша в браузере. По этой теории он должен тогда при перезапуске старое изображение показывать.

pypi4goda
когда плохо в нем разберался
Я вообще Django не знаю, наугад тебе пишу. Но я как бы знаю, как они примерно все работают, такие системы.
VadimK
 <img src="ТУТ ФОРМИРУЕТСЯ ССЛЫКА?{{ any_random_integer }}" alt="izobrazhenie" width="250" height="250" class="indent">

Кеширование браузера таким образом сбрасывайте.
pypi4goda
Большое спасибо, VadimK! Проблему удалось решить при помощи сброса браузерного кеша так, как предложили это сделать Вы.

И спасибо py.user.next, Вы помогли мне глубже разобраться в проблеме!

Хорошего дня.
py.user.next
pypi4goda
Большое спасибо, VadimK! Проблему удалось решить при помощи сброса браузерного кеша так, как предложили это сделать Вы.
Ну, это такое, костыльное решение. Тебе придётся тогда что, по всем сайтам, которые ты делаешь, все ссылки менять? Лучше всё-таки в Django разберись, где там у него и что по кешу. Иначе тебе так сломанный Django залезет во все сайты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB