Проблемы с обновлением кэша шаблонов Django - PullRequest
3 голосов
/ 28 мая 2011

Я пытался написать простое приложение в Django для кэширования некоторых внешних изображений и отображения / обновления их по запросу.

Что я делаю:
{% load cache %} {% cache 1500 image %} {% endcache %}</p> <p> и refresh делает это в коде представления при нажатии кнопки «Обновить»:
key = "template.cache.image.d41d8cd98f00b204e9800998ecf8427e" cache.delete( key )

Теперь все работает нормально, когда изображение удаляется, или я заменяю src другим значением. Это также работает, когда я набираю что-то внутри тегов {% cache ... %} {% endcache %}, но когда изображение изменяется - как я заменяю его другим - кнопка обновления ничего не делает с этим, пока я не обновлю всю страницу кнопкой обновления браузера (или с помощью F5 ). Я тестировал его на Chrome (некоторые версии) и Opera (11). В моем представлении не используются какие-либо параметры кэширования, но я пробовал использовать @never_cache и некоторые другие теги, но ничего не помогло.

Надеюсь, вы поможете мне с этим.


С наилучшими пожеланиями.

Редактировать: Я пытаюсь кэшировать изображение и обновлять его по запросу. Может быть, для получения изображения требуется некоторая работа с Python, кэширование хеш-ответа, а затем повторное кеширование изображения (удаляя его, если его предыдущий хеш-код изменяется), но я понятия не имею, как «отправить» изображение через python HttpResponse / render_to_response to » HTML-форма ", чтобы отобразить его.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2012

Ответ Кена работает для меня.

Если вы используете django, в шаблоне просто используйте что-то вроде

    <img src="/image.jpg?cachebuster={{uuid}}" /> 

и передать uuid со стороны сервера.

Я бы хотел проголосовать за ответ Кена, но, к сожалению, у меня недостаточно репутации, чтобы сделать это. Извините, я должен ответить на этот вопрос снова.

2 голосов
/ 28 мая 2011

Вы сохраняете то же имя изображения, но меняете его? Я предполагаю, что именно кеш браузера вызывает у вас проблемы, а не кеш django.

Попробуйте добавить строку запроса в конец изображения, это должно помочь сделать кеш браузера недействительным. не имеет значения, что вы вводите в строку запроса, просто он должен быть уникальным

<img src="/image.jpg?cachebuster=blah23" />

0 голосов
/ 20 февраля 2018

У меня была проблема с обновлением кэша браузера, и ответ Кена Кокрейна привел меня к решению.

Моя проблема была со страницей сведений о модели.После обновления записи, вернувшись на страницу с подробностями, браузер показал, что было в кеше - страница без обновлений.Это сосало большое время!Представьте себе замешательство пользователя после сохранения некоторых обновлений только для того, чтобы неправильно понять со страницы сведений о версии (кеш браузера), что обновления не были сохранены!Но они были сохранены, проблема заключалась в том, что браузер показывал кэшированную версию.

Решение Кена Кокрейна: добавление строки запроса с что-то уникальным.Это сработало для меня!Сначала я просто добавил timezone.now (), отформатированный для совместимости с URL-адресом, например? Utc = 2018-02-19_22.57.30 (в URL-адресах двоеточия переходят через порт, двоеточия путают URL-адрес - нельзя использовать двоеточия).

Строка формата Python: '% Y-% m-% d_% H.% M.% S'

Это решило мою проблему, но заставляло обновляться каждый раз, когда пользователь приходилвернуться на страницу подробного просмотра, даже если обновления не было.Затем мне пришло в голову: вместо использования timezone.now () используйте отметку времени последнего обновления строки модели.После обновления отметка времени последнего обновления будет позже предыдущей, поэтому браузер обновится.Если пользователь снова вернется без какого-либо обновления, отметка времени последнего обновления будет такой же, поэтому браузер сможет отобразить кэшированную страницу.

Итак, моя строка запроса имеет значение? Updated = 2018-02-19_22.57.30

Решение может использоваться при сохранении того же имени изображения, но при изменении файла изображения с использованием метки времени файловой системы файла изображения для строки запроса.Только когда изображение изменится, отметка времени будет другой, и браузер обновится.Если файл изображения совпадает, отметка времени будет такой же, поэтому браузер может показать кэшированную версию.

...