У меня есть проект с Django CMS и django-mobile для рендеринга различных шаблонов для мобильных устройств.
Если кэширование страниц включено в Django CMS, можно увидеть полный мобильный шаблон, отображаемый в настольном браузере, или наоборот; рабочий стол на мобильном.
Из некоторых документов Google я полагал, что решение этой проблемы заключается в настройке промежуточного программного обеспечения для patch_vary_headers
;
from django.utils.cache import patch_vary_headers
class VaryHeaderMiddleware(object):
def process_response(self, request, response):
# Set Vary Header based on
# https://developers.google.com/webmasters/smartphone-sites/details
patch_vary_headers(response, ['User-Agent'])
return response
С отключенным CMS_PAGE_CACHE
я не видел, чтобы полные шаблоны страниц отображались на неправильных устройствах, но у меня есть страница, которая отображается с помощью шаблона рабочего стола, но затем приложения, отображаемые на странице через заполнители CMS, отображают свой мобильный шаблон на рабочий стол. И это при том, что CMS_PLACEHOLDER_CACHE
и CMS_PLUGIN_CACHE
все еще включены.
Я только что нашел этот отчет об ошибке от Django, в котором предполагается, что можно опустить заголовок изменения, когда с помощью декоратора кэширования страниц, но может ли это произойти в более широком масштабе, если я вижу несовпадающий рендеринг шаблона при кэшировании определенных элементов?
Я использую последнюю версию django-mobile 0.5.0 и считаю, что все классы промежуточного программного обеспечения определены в правильном порядке;
'project.middleware.VaryHeaderMiddleware',
'django_mobile.middleware.MobileDetectionMiddleware',
'django_mobile.middleware.SetFlavourMiddleware',
'django_mobile.cache.middleware.CacheFlavourMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)