0

我正在使用 Django-CMS 构建一个站点,我们使用MobileESP来检测用户代理并根据用于查看站点的设备提供不同的模板和内容。

问题是使用 django-cms 的内置页面缓存,根据缓存的页面版本,用户会看到错误的内容。例如,如果先查看网站的桌面版本,然后缓存,则在智能手机上访问该网站的用户仍会看到桌面版本,而不是移动版本。

对于传统的 Django 视图,这可以使用 @vary_on_headers('User-Agent') 来解决,以确保正确缓存站点的不同版本。

是否有可能将此逻辑应用于 Django-CMS 视图?

4

2 回答 2

1

我设法通过在自定义中间件类中使用 patch_vary_headers() 功能找到解决此问题的方法。我已经有一个平台检测中间件,它将移动/桌面设置添加到请求对象。所以我只是在中间件中添加了一个 process_response 函数并在那里修补它。到目前为止,它似乎工作正常。

class PlatformDetectionMiddleWare (object):

    def process_request(self, request):
        user_agent = request.META.get("HTTP_USER_AGENT")
        http_accept = request.META.get("HTTP_ACCEPT")

        agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
        request.is_tablet = agent.detectTierTablet()
        request.is_mobile = agent.detectTierIphone()

    def process_response(self, request, response):
        patch_vary_headers(response, ['User-Agent'])
        return response
于 2013-10-07T20:42:32.280 回答
0

http://www.djangobook.com/en/2.0/chapter15.html我认为您可以像 SI Eric 建议的那样进行缓存,并且此链接谈论使用 vary_header 进行缓存,我认为它可以帮助解决您的问题。我缓存在视图层

@vary_on_headers('User-Agent')

在我的项目中,它运行得很好!

于 2013-12-14T03:22:14.263 回答