2010-02-23 4 views
32

Ich habe eine Web-Anwendung in Django geschrieben, die eine bestimmte Seite, die ich möchte implementieren eine mobile Version der Vorlage (und etwas andere Logik) für. Ich möchte in der Lage sein, es ala diesen sudo Code zu implementieren:Ermitteln mobilen Browser (nicht nur iPhone) in Python View

def(myView) 

    do some stuff 

    if user-is-on-a-mobile-device: 
    do some stuff 
    return (my mobile template) 

    else: 
    do some stuff 
    return (my normal template) 

ich nicht eine riesige Menge an Zeit habe, und ich bin ziemlich früh in meiner Codierung Lernkurve :) - ich fand, was sieht aus wie eine sehr leistungsfähige Pluggable-App namens Blüte für mobile Geräte Fähigkeiten zu bekommen - http://code.google.com/p/django-bloom/wiki/BloomDevice Allerdings scheint es eine Anfrage über JSON zu machen, um viele Geräte-Spezifikationen zu bekommen, die ich nicht brauche, die ein wenig ineffizient für mich scheint.

Hat jemand eine einfachere Methode vorschlagen? Meine Erkennung muss nicht 100% sein, nur iPhone, iPod, Android und Mainstream-Geräte ...

Hat der http_user_agent String eine Art mobile Flagge, die ich überprüfen kann?

+0

Tippfehler: sudo = pseudo – pmont

Antwort

19

Update:

Ich habe gerade: http://code.google.com/p/minidetector/

Was genau zu tun scheint, was ich will, ich werde jetzt testen. Fühlen Sie sich frei, mir zu sagen, dass ich falsch liege!

+0

Vielen Dank für die gemeinsame Nutzung, die finden. Für mich ist das, was diese Middleware macht, eine bessere Lösung als all die anderen, die ich jemals benutzt habe, um ähnliche Ziele zu erreichen. – ayaz

+2

Ist dieses Projekt aktuell? Seit Dezember 2010 hat sich keine Änderung ergeben. Ich habe stattdessen https://github.com/shelfwordy/minidetector verwendet, da es aktiv entwickelt wurde. Leider hat mir der Autor gesagt, dass es nicht mehr unterstützt wird und er wollte das GitHub Repo löschen, also suche ich nach einem Ersatz. –

+0

Wenn Sie das Netzwerk für Minidector überprüfen, gibt es ein paar Gabeln, die nicht so alt sind - https://github.com/saschwarz/minidetector/network – Alvin

15

Best Practice: Verwenden Sie minidetector, um der Anfrage zusätzliche Informationen hinzuzufügen, und verwenden Sie dann den integrierten Anfragekontext von django, um ihn wie in Ihren Vorlagen zu übergeben.

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def my_view_on_mobile_and_desktop(request) 
    ..... 
    render_to_response('regular_template.html', 
         {'my vars to template':vars}, 
         context_instance=RequestContext(request)) 

dann in Ihrer Vorlage, die Sie Sachen vorstellen können wie:

<html> 
    <head> 
    {% block head %} 
    <title>blah</title> 
    {% if request.mobile %} 
    <link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-mobile.css"> 
    {% else %} 
    <link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-desktop.css"> 
    {% endif %} 
    </head> 
    <body> 
    <div id="navigation"> 
     {% include "_navigation.html" %} 
    </div> 
    {% if not request.mobile %} 
    <div id="sidebar"> 
     <p> sidebar content not fit for mobile </p> 
    </div> 
    {% endif %> 
    <div id="content"> 
     <article> 
     {% if not request.mobile %} 
     <aside> 
      <p> aside content </p> 
     </aside> 
     {% endif %} 
     <p> article content </p> 
     </aricle> 
    </div> 
    </body> 
</html> 
+1

Viele Leute folgen dieser Konvention, obwohl ich es nicht mag, weil Es zwingt die Entwickler, eine Vielzahl von if-Anweisungen anstelle von nur 1 zu haben. Sie können argumentieren, dass das Anzeigen verschiedener Vorlagen insgesamt nicht DRY ist, aber ich denke, die Vernunft der Trennung der beiden ist es wert. – Mikhail

7

go für die Gabel von minidetecor django-mobi genannt, enthält es Dokumentation, wie es zu benutzen.

https://pypi.python.org/pypi/django-mobi

+0

Dies scheint die beste Lösung zu sein. __ "Fork Beschreibung: Ich habe den Code neu organisiert, Caching hinzugefügt und ein paar Verbesserungen hier und da vorgenommen." __ – Druska

Verwandte Themen