Ich verwende bereits eine Geräteerkennung (http://djangosnippets.org/snippets/2228/) in meinen Vorlagen und versuche, sie auch in Ansichten zu verwenden, sodass ich zum App Store umleiten kann, wenn ein Benutzer von einem iPhone kommt.Django - Mobilgerät in Sichten erkennen
So hatte ich schon:
import re
def mobile(request):
device = {}
ua = request.META.get('HTTP_USER_AGENT', '').lower()
if ua.find("iphone") > 0:
device['iphone'] = "iphone" + re.search("iphone os (\d)", ua).groups(0)[0]
if ua.find("ipad") > 0:
device['ipad'] = "ipad"
if ua.find("android") > 0:
device['android'] = "android" + re.search("android (\d\.\d)", ua).groups(0)[0].translate(None, '.')
# spits out device names for CSS targeting, to be applied to <html> or <body>.
device['classes'] = " ".join(v for (k,v) in device.items())
return {'device': device }
und erstellt dann eine Klasse in Werkzeuge/middleware.py:
from tools.context_processor import mobile
class detect_device(object):
def process_request(self, request):
device = mobile(request)
request.device = device
hinzugefügt folgendes MIDDLEWARE_CLASSES im settings.py:
'tools.middleware.detect_device'
Und in views.py habe ich erstellt:
def get_link(request):
if request.device.iphone:
app_store_link = settings.APP_STORE_LINK
return HttpResponseRedirect(app_store_link)
else:
return HttpResponseRedirect('/')
Aber ich erhalte die Fehlermeldung:
'dict' object has no attribute 'iphone'
FYI ', find' einen Index des ersten Treffers zurück, so dass es theoretisch 0. Ihre Kontrollen sollten so' wenn ua.find ("iphone") aussehen zurückkehren kann> - 1 statt, wie es -1 für keine Übereinstimmung zurückgibt. –