2017-02-16 4 views
2

私のDjangoビューでモバイルデバイスからリクエストが来たのかどうかを簡単に検出するのは難しいです。DjangoとPython 3でモバイルデバイスを検出

私はこのような何かを実装しようとしています:

#views.py 

def myfunction(request): 

    ... 
    if request.mobile: 
     is_mobile = True 
    else: 
     is_mobile = False 

    context = { 
     ... , 
     'is_mobile': is_mobile, 
    } 
    return render(request, 'mytemplate.html', context) 

そしてmytemplate.html中:

どこでも私は minidetectorが推奨され、(例えば hereまたは here用)をチェック
{% if is_mobile %}  
    show something 
{% else %} 
    show something else 
{% endif %} 

を。だからここに私の質問に直接pip install minidetectorpip install minidetector2だけでなく、GitHubのリポジトリのカップル、それらのどれも

のPython 3と互換性がありません:私は別のバージョンがインストールされている互換性のあるminidetectorのいずれかのバージョン/フォークはありますPython 3で?そうでない場合、代替案は何ですか?

+0

あなたは無関係のはAttributeErrorの質問にリンクされています。 Stacktraceを投稿する – e4c5

+0

リンクは、minidetectorがPython 3と互換性がないことを示すことを目的としています。質問自体についての混乱を避けるため、削除してその部分を改めました。 – J0ANMM

答えて

5

Django User Agentsパッケージには、上方に設けられたリンクでのインストール手順に従ってください

のPython 3と互換性があり、次のように、あなたはそれを使用することができます:

def my_view(request): 

    # Let's assume that the visitor uses an iPhone... 
    request.user_agent.is_mobile # returns True 
    request.user_agent.is_tablet # returns False 
    request.user_agent.is_touch_capable # returns True 
    request.user_agent.is_pC# returns False 
    request.user_agent.is_bot # returns False 

    # Accessing user agent's browser attributes 
    request.user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1') 
    request.user_agent.browser.family # returns 'Mobile Safari' 
    request.user_agent.browser.version # returns (5, 1) 
    request.user_agent.browser.version_string # returns '5.1' 

    # Operating System properties 
    request.user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1') 
    request.user_agent.os.family # returns 'iOS' 
    request.user_agent.os.version # returns (5, 1) 
    request.user_agent.os.version_string # returns '5.1' 

    # Device properties 
    request.user_agent.device # returns Device(family='iPhone') 
    request.user_agent.device.family # returns 'iPhone' 

テンプレートでの使用は次のとおりです。

{% if request.user_agent.is_mobile %} 
    Do stuff here... 
{% endif %} 

ただし、Django 1.10ではミドルウェアクラスが変更されています。したがって、Django 1.10 +を使用している場合は、このパッケージのミドルウェアクラス定義をGitHub issue tracker pageのように変更する必要があります。

4

this answerから始まる別の方法が見つかりました。 views.pyに追加機能を追加することで

import re 

def mobile(request): 
"""Return True if the request comes from a mobile device.""" 

    MOBILE_AGENT_RE=re.compile(r".*(iphone|mobile|androidtouch)",re.IGNORECASE) 

    if MOBILE_AGENT_RE.match(request.META['HTTP_USER_AGENT']): 
     return True 
    else: 
     return False 


def myfunction(request): 

    ... 
    if mobile(request): 
     is_mobile = True 
    else: 
     is_mobile = False 

    context = { 
     ... , 
     'is_mobile': is_mobile, 
    } 
    return render(request, 'mytemplate.html', context) 
関連する問題