django-mobile视图渲染到桌面&反之亦然使用缓存

时间:2015-05-28 08:50:01

标签: django caching django-cms

我有一个运行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_CACHECMS_PLUGIN_CACHE仍处于启用状态。

现在我刚从Django发现这个bug report表明在使用页面缓存装饰器时可以省略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',
)

1 个答案:

答案 0 :(得分:0)

CMS_PAGE_CACHE无法区分移动设备和桌面设备时,可以将其关闭并通过模板片段缓存替换它,请参阅docs

最简单的方法是使用例如

启动基本模板
{% load cache %}
{% cache 500 the_whole_page %}

并以

结束
{% endcache %}

我没有对它进行测试,但它应该有效。