django-mobilityを試す

アクセスした端末のUserAgentによってレスポンスを変えたい場合に使えるライブラリ

インストール

 pip install django-mobility

設定

ドキュメントに書いてあるままsettings.pyに設定を書く
ただの値はデフォルト値なので、このまま使う場合は書かなくてもいい

# A regex for detecting mobile user agents.
MOBILE_USER_AGENTS = 'android|fennec|iemobile|iphone|opera (?:mini|mobi)'
# The name of the cookie to set if the user prefers the mobile site.
MOBILE_COOKIE = 'mobile'


Middlewareを追加する必要がある

MIDDLEWARE_CLASSES += (
    'mobility.middleware.DetectMobileMiddleware',
    'mobility.middleware.XMobileMiddleware',
)

デコレータを使う

Middlewareによってモバイル端末からアクセスされたと判断された場合はmobile/index.htmlが表示される
mobileというディレクトリ名は今のところ変更できない

from django.template.response import TemplateResponse
from mobility.decorators import mobile_template


@mobile_template('sampleapp/{mobile/}index.html')
def index(request, template=None):
    return TemplateResponse(
        request=request,
        template=template
    )

関数を分けて書きたい場合はmobilizedデコレータを使う

from django.template.response import TemplateResponse
from mobility.decorators import mobilized


def viewpc(request):
    return TemplateResponse(
        request=request,
        template='sampleapp/index.html'
    )


@mobilized(viewpc)
def viewmobile(request):
    return TemplateResponse(
        request=request,
        template='sampleapp/mobile/index.html'
    )

urls.pyにはviewmobileのほうを設定しておけば、PCでアクセスした場合はviewpcが処理される