да, как указано выше ...
Я напишу только пример:
>>> a = open('file.txt')
>>> a.read()
#output
>>> a.seek(0)
>>> a.read()
#same output
Вместо того, чтобы изменять шаблонные каталоги динамично, Вы могли изменить запрос и добавить значение, которое сообщает Вашему представлению, если пользователь находится на iPhone или нет. Тогда оберните render_to_response (или независимо от того, что Вы используете для создания объектов HttpResponse) захватить версию iPhone шаблона вместо стандартной версии HTML, если они используют iPhone.
Эта статья могла бы быть полезной: Создают Мобильное и Настольно-дружественное Приложение в Django за 15 Минут
Я разрабатываю djangobile, django мобильное расширение: http://code.google.com/p/djangobile/
Необходимо смотреть на исходный код django-mobileadmin , который решил точно эту проблему.
Другой путь создал бы Ваш собственный шаблонный загрузчик, который загружает шаблоны, характерные для агента пользователя. Это - довольно универсальная техника и может быть использованием для динамичного определения, какой шаблон должен быть загружен в зависимости от других факторов также, как требуемый язык (хороший компаньон к существующему оборудованию Django i18n).
Django Book имеет раздел по этому предмету .
Существует хорошая статья, которая объясняет, как представить те же данные различными шаблонами http://www.postneo.com/2006/07/26/acknowledging-the-mobile-web-with-django
, все еще необходимо автоматически перенаправить пользователя на мобильный сайт однако, и это может быть сделано с помощью нескольких методов (прием check_mobile будет работать также)
Как насчет того, чтобы перенаправить пользователя на i.xxx.com после парсинга его UA в некотором промежуточном программном обеспечении? Я высоко сомневаюсь, что мобильные пользователи заботятся, как URL похож, тем не менее они могут получить доступ к Вашему сайту с помощью основного URL.
Определяем user agent в middleware, переключаем привязки url, профит!
Как? Объекты запросов Django имеют атрибут .urlconf, который может быть установлен промежуточным ПО.
Из документации django:
Django определяет корневой URLconf модуль для использования. Как правило, это значение параметра ROOT_URLCONF, но если входящий объект HttpRequest имеет атрибут urlconf (установленный обработкой запроса промежуточным ПО), его значение будет использовано вместо ROOT_URLCONF.
В файле yourproj/middlware.py напишите класс, который проверяет строку http_user_agent:
import re
MOBILE_AGENT_RE=re.compile(r".*(iphone|mobile|androidtouch)",re.IGNORECASE)
class MobileMiddleware(object):
def process_request(self,request):
if MOBILE_AGENT_RE.match(request.META['HTTP_USER_AGENT']):
request.urlconf="yourproj.mobile_urls"
Не забудьте добавить это в MIDDLEWARE_CLASSES в settings.py:
MIDDLEWARE_CLASSES= [...
'yourproj.middleware.MobileMiddleware',
...]
Создаем мобильный urlconf, yourproj/mobile_urls.py:
urlpatterns=patterns('',('r'/?$', 'mobile.index'), ...)