Django优雅的渲染引擎重定向任务

时间:2011-06-16 08:00:29

标签: python django

我正在尝试找到一个漂亮而优雅的解决方案,用于检测渲染引擎(mozilla,webkit等)并将访问者重定向到正确的模板和CSS。

目前我有这个设置:

检测(中间件):

import re

class BrowserDetectionMiddleware(object):

    def __init__(self):
        self.data_browser = [
            {
                'renderingEngine': "WebKit",
                'subString': "Chrome",
                'identity': "Chrome",
                'versionSearch': "Chrome/"
            },
            {
                'renderingEngine': "WebKit",
                'subString': "Apple",
                'identity': "Safari",
                'versionSearch': "Version/"
            },
            {
                'renderingEngine': "None",
                'subString': "Opera",
                'identity': "Opera",
                'versionSearch': "Version/"
            },
            {
                'renderingEngine': "Mozilla",
                'subString': "Firefox",
                'identity': "Firefox",
                'versionSearch': "Firefox/"
            },
            {
                'renderingEngine': "MSIE",
                'subString': "MSIE",
                'identity': "Explorer",
                'versionSearch': "MSIE "
            },
        ]

    def process_request(self, request):
        request.browser_name = None
        request.browser_version = None
        request.browser_renderingEngine = None
        for b in self.data_browser:
            if b['renderingEngine'] in request.META['HTTP_USER_AGENT']:
                request.browser_renderingEngine = b['renderingEngine']
            if b['subString'] in request.META['HTTP_USER_AGENT']:
                request.browser_name = b['identity']
                if b.has_key('versionSearch'):
                    f = re.compile(b['versionSearch']+'([0-9\.]+)',re.M)
                    m = f.search(request.META['HTTP_USER_AGENT'])
                    if m:                
                        request.browser_version = m.group(1)
                break

    def process_view(self, request, view_func, view_args, view_kwargs):
        pass

    def process_response(self, request, response):
        return response

    def process_exception(self, request, exception):
        pass

查看:

from django.http import Http404
from django.shortcuts import render_to_response


def rendering_engine_dispatcher(request):

    PREFIX = request.browser_renderingEngine

    if not PREFIX is None:
        str.lower(PREFIX)
        return render_to_response(PREFIX+'/home.xhtml', {})
    else:
        raise Http404

这很好用,但我宁愿通过中间件调节一切。我的另一个想法是创建一个render_to_response_prefixed函数..?

我会喜欢一些优雅的解决方案..: - )

1 个答案:

答案 0 :(得分:0)

最优雅的解决方案是使用跨浏览器的CSS框架(如blueprint960.gs52framework等)。那里有一吨,选一个......