Обнаружение мобильного браузера (не только iPhone) в представлении Python - PullRequest
32 голосов
/ 23 февраля 2010

У меня есть веб-приложение, написанное на Django, которое имеет одну конкретную страницу, для которой я хотел бы реализовать мобильную версию шаблона (и немного другую логику). Я хотел бы иметь возможность реализовать это аля этот код sudo:

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)

У меня не так уж много времени, и я довольно рано начал изучать кодирование :) - я нашел очень мощное подключаемое приложение под названием Bloom для получения возможностей мобильных устройств - http://code.google.com/p/django-bloom/wiki/BloomDevice Однако кажется, что он делает запрос через JSON, чтобы получить множество ненужных мне технических характеристик устройства, что мне кажется неэффективным.

У кого-нибудь есть более простой метод? Мое обнаружение не должно быть на 100%, только iPhone, iPod, Android и обычные устройства ...

Есть ли в строке http_user_agent какой-либо мобильный флаг, который я могу проверить?

Ответы [ 3 ]

19 голосов
/ 23 февраля 2010

Обновление:

Я только что нашел: http://code.google.com/p/minidetector/

Который, кажется, делает именно то, что я хочу, сейчас я собираюсь проверить. Не стесняйтесь сказать мне, что я не прав!

15 голосов
/ 11 ноября 2010

рекомендация: используйте minidetector , чтобы добавить дополнительную информацию к запросу, затем используйте встроенный контекст запроса django, чтобы передать его в ваши шаблоны следующим образом.

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

тогда в вашем шаблоне вы можете ввести такие вещи, как:

<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>
7 голосов
/ 19 марта 2013

переходите к форку minidetecor под названием django-mobi, он включает документацию о том, как его использовать.

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

...