django-mobile изгледи, изобразени на работния плот и обратно, когато се използва кеширане

Имам проект, работещ с 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, който предполага, че е възможно да се пропусне заглавката vary, когато използвайки декоратора за кеширане на страници, но може ли това да се случи в по-широк мащаб, ако виждам изобразяване на несъответстващ шаблон, докато определени елементи се кешират?

Изпълнявам най-новия 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',
)

person markwalker_    schedule 28.05.2015    source източник


Отговори (1)


Когато CMS_PAGE_CACHE не успее да различи мобилни от настолни устройства, добре е да го изключите и да го замените с кеширане на фрагмент на шаблон, вижте документи.

Най-лесният начин би бил да започнете своя основен шаблон с напр.

{% load cache %}
{% cache 500 the_whole_page %}

и да приключим с това

{% endcache %}

Не съм го тествал, но трябва да работи.

person Philipp Zedler    schedule 04.06.2015