32 votes

Détecter le navigateur mobile (pas seulement l'iPhone) en mode python

J'ai une application web écrite en Django qui a une page spécifique que j'aimerais mettre en œuvre une version mobile du modèle (et légèrement différente de la logique) pour. Je voudrais être en mesure de mettre en œuvre ala cette sudo code:

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)

Je n'ai pas une énorme quantité de temps et j'en suis au début de ma codage de la courbe d'apprentissage :) - j'ai trouvé ce qui semble être un très puissant enfichable application appelée la floraison pour obtenir de l'appareil mobile capablities - http://code.google.com/p/django-bloom/wiki/BloomDevice Cependant, elle semble faire une demande via JSON obtenir beaucoup d'appareil, les specs, je n'ai pas besoin, ce qui semble un peu inefficace pour moi.

Quelqu'un suggère méthode plus simple? Mon détection n'a pas besoin d'être à 100%, juste iPhone, iPod, android, et d'intégrer des dispositifs de...

Le http_user_agent chaîne ont un certain type de mobile drapeau je peux vérifier?

19voto

Tristan Brotherton Points 812

Mise à jour:

Je viens de trouver: http://code.google.com/p/minidetector/

Ce qui semble faire exactement ce que je veux, je vais tester maintenant. N'hésitez pas à me dire que j'ai tort!

15voto

Thomas Points 7109

Meilleure pratique: utilisez minidetector pour ajouter les informations supplémentaires à la demande, puis utilisez le contexte de demande intégré de django pour le transmettre à vos modèles de la manière suivante.

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

ensuite, dans votre modèle, vous pouvez introduire des éléments tels que:

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

7voto

gterzian Points 209

optez pour le fork de minidetecor appelé django-mobi, il contient une documentation sur son utilisation.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X