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')