studylog/北の雲

chainer/python/nlp

Djangoでスマホ振り分け

RailsだとjpmobileがあったけどDjangoにはあんまり良さそうなのが見つからないのでPCとスマホを振り分けるコードを書いた

ミドルウェアのprocess_viewはビュー実行前に通過するのでここでUserAgentより振り分け処理開始



from user_agents import parse

class MyMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        #mobile判定
        request.user_agent_flag = MyMiddleware.user_agent_check(request) 
        return None
 
    #ユーザーエージェントからmobileかどうか判定してmobileなら  "mobile/"という文字列を返す そのままテンプレートのディレクトリに使う
    def user_agent_check(request):
        ua_string = request.META["HTTP_USER_AGENT"] #本番はこっち
        user_agent = parse(ua_string)
        if user_agent.is_mobile:
            return "mobile/"
        else:
            return ""


#これでViewの処理段階でもしスマホならrequest.user_agent_flag に"mobile/"という文字列が入る
 
#以下ビュー側


def user(requests):
    #もしrequest.user_agent_flagが空ならそのままのテンプレートを使う
    #もしrequest.user_agent_flagが"mobile/"だと通常のテンプレートディレクトリではなくてmobileディレクトリにのファイルを使うようになる
    return render_to_response(request.user_agent_flag'+ user.html')