我有一个运行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发现这个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',
)
答案 0 :(得分:0)
当CMS_PAGE_CACHE
无法区分移动设备和桌面设备时,可以将其关闭并通过模板片段缓存替换它,请参阅docs。
最简单的方法是使用例如
启动基本模板{% load cache %}
{% cache 500 the_whole_page %}
并以
结束{% endcache %}
我没有对它进行测试,但它应该有效。